— 全值匹配我最爱,最佳左前缀法则;

— 带头大哥不能死,中间兄弟不能断;

— 索引列上少计算,范围之后全失效;

— LIKE百分写最右(类型转换也失效),覆盖索引不写*;

— 不等空值还有OR,索引影响要注意;

— VAR引号不可丢, SQL优化有诀窍

全值匹配我最爱 name, age, sjh name:63 复合索引情况下,如果能用到复合索引的全部值就最好

最佳左前缀法则 复合索引的主索引字段推荐写在最左边

带头大哥不能死,中间兄弟不能断(可以乱)

索引列上少计算 不要在索引列上参与任何计算【隐式类型转换】

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE id+1= 4

范围之后全失效 复合索引时候,范围之后 NOT IN NOT EXIST <> != 全部失效

EXPLAIN SELECT SQL_NO_CACHE * FROM t_emp WHERE name=’洪七公’ AND age>10 AND sjh=’444444’

尽量使用覆盖索引

只访问索引的查询(索引列和查询列一致)),减少select *

1.1. 一般性建议

对于单键索引,尽量选择过滤性更好的索引(例如:手机号,邮件,身份证)
在选择组合索引的时候,过滤性最好的字段在索引字段顺序中,位置越靠前越好。
选择组合索引时,尽量包含where中更多字段的索引
组合索引出现范围查询时,尽量把这个字段放在索引次序的最后面
尽量避免造成索引失效的情况

提高 order by 的效率

1,只查询需要的字段 能不selec就不select
2.尝试提高 sort_buffer_size
3. 尝试提高 max_length_for_sort_data

GROUP BY关键字优化

group by 使用索引的原则几乎跟order by一致 ,唯一区别:
l group by 先排序再分组,遵照索引建的最佳左前缀法则
l 当无法使用索引列,增大max_length_for_sort_data和sort_buffer_size参数的设置
l where高于having,能写在where限定的条件就不要写在having中了
l group by没有过滤条件,也可以用上索引。Order By 必须有过滤条件才能使用上索引。

查询索引,覆盖索引优化

禁止使用select *
禁止查询与业务无关字段
尽量使用覆盖索引