mysql索引优化常用手段

满足最左匹配原则

顾名思义:最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。

不使用select *

使用SELECT*时,将无法进行概要分析。select *是一种反模式。如果是使用非主键索引查询,会出现回表的情况。.

索引列上不要有计算

比如时间类型字段 做范围查询,那么应该是( dt>=参数 and  参数<dt) 不应该是 (格式化 dt)=参数 这种模式,这样会导致索引失效。

索引列不要用了函数

避免在WHERE条件中,在索引列上进行计算或使用函数,因为这将导致索引不被使用。

where 条件字段类型要相同

mysql在做比较时,如果发现类型不匹配,mysql是会自动隐式类型转换。

like左边包含%

通常我们大家都知道最左前缀匹配原则,如果like '%XY'这种情况就没办法使用索引,但是在业务场景中,这种情况又非常常见,可以将要全模糊匹配的列aaa存储,这样就可以通过like 'XY%'  or aaa的列 like  ‘YX%’ 的形式来实现,走索引

不做列对比

Mysql的比较两列 qty < total  会导致索引失效

不要使用or关键字

用UNION替换OR。(适用于索引列)通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果.对索引列使用OR将造成全表扫描.以上规则只针对多个索引列有效.如果有column没有被索引,查询效率可能会因为你没有选择OR而降低。

不要使用 not in和not exists

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。也就是说,in和exists需要具体情况具体分析,not in和not exists就不用分析了,尽量用not exists就好了。