一、SQL分析:
二、索引失效的场景:
2.1使用or作为连接条件
说明:
- 当or两边的条件都有索引时,才可能走索引(通常是使用了多个索引index_merge),最终是否走索引,需根据explain来检测。
优化:
- 将or两边条件中相同的条件抽取出来:where ( a=xx and b=xx ) or ( a=xx and b=xxx) ==> where a=xx and (b=xx or b=xxx)
- 使用union all或union
2.2使用in(或not in)时,条件参数在2个或2个以上
优化:
- 如果条件是连续数字,则改为使用 between and
- 如果条件不是连续数字,使用union
2.3使用!=或<>
优化:
- 避免在 where 子句中使用!=或<>操作符
2.4使用null值
优化:
- 给字段设置默认值
2.5在字段上进行函数运算
优化:
- 避免在字段上进行运算。eg:select id from t where a*0.6 > 6000 ==> select id from t where a > 10000
2.6列类型为字符串,查询的数据没有用引号引起来
- 查询的数据必须用引号引起来
2.7使用复合索引,索引的第一字段为空
- 使用复合索引需符合最左前缀匹配原则
2.8左模糊查询
- 禁止使用左模糊