sql优化 (加索引,select查询写字段,查询一条数据写limit 1 ,用连接查询代替子查询,小表驱动大表,排序尽量用索引字段) 1、select语句务必指明字段名称; 2、当只需要一条数据的时候,使用limit 1 3、如果排序字段没有用到索引,就尽量少排序,可以在程序中排序 4、联合查询 尽量用union all代替union 5、建立索引 引起索引失效的情况: 1、使用了select *; 2、索引列上有计算或是函数;3、模糊匹配like查询%开始,4、使用了or连接 6、用连接查询代替子查询 7、小表驱动大表 in() in 适用于左边大表,右边小表。exists 适用于左边小表,右边大表。 8、先缩小数据的范围之后,再分组或排序; group by having 9、合理的数据类型; inner join:求两个表交集的数据。 union对两个结果集进行并集操作,不包括重复行,相当于distinct, 同时进行默认规则的排序; union all: 对两个结果集进行并集操作, 包括重复行, 不进行排序; 注意: UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列 每条 SELECT 语句中列的顺序必须相同 union all 结果字段的顺序以 union all 前面的表字段顺序为准 各 SELECT 语句字段名称可以不同,但字段属性必须一致。 查询的两张表的字段不统一,如果table1比table2的字段内容多,可以使用空字符串来代替; 如果有筛选条件, 务必先各自筛选,最后在统一的排序;
如果是长度固定的字段,比如用户手机号,一般都是11位的,可以定义成char类型,长度是11字节。 长度固定的字符串字段,用char类型。 长度可变的字符串字段,用varchar类型。 金额字段用decimal,避免精度丢失问题。
|