- 日常SQL语句查询,部分SQL由于条件会导致索引失效,下面整理一些典型的SQL语句,优化索引生效,加快查询:
- 1、百分号索引失效,如果是LIKE 'MYSQL'则索引生效
注意:
1、索引中不能有%号,否则索引失效
例如在一个表中:title与body为全文索引,现在要查body中的一个文章包含某关键词的数据。
原SQL不走索引范例:
FROM TABLE WHERE BODY LIKE '%MYSQL%'
优化后则走全文索引:
FROM TABLE WHERE MATCH(body,title) AGAINST ('MYSQL')
- 2、联合索引下索引失效
注意:
1、联合索引如果字段是字符串类型,一定要加 ' '号,否则也会进行全局扫
2、联合索引一定要使用连个值,最左匹配原则。
例如在一个表中有联合索引,通过两个条件数据进行查询的时候。
索引失效:联合索引只使用一个条件无法使用到索引
1、FROM TABLE WHERE FIED1 = 1 OR FIED2 = 2
1、FROM TABLE WHERE FIED2 = 2
索引生效:
1、FROM TABLE WHERE FIED1 = '1'
1、FROM TABLE WHERE FIED1 = '1' AND FIED2 = '2'
- 3、应避免where条件上判断null值失效
注意:
1、当索引在where条件中带IS NULL则索引失效
索引失效:
FROM TABLE WHERE FIELD IS NULL
索引生效:可以将字段设置成0,则查询直接查询为0的数据即可
FROM TABLE WHERE FIELD ='0'
- 4、group by分组后,默认分组会进行排序,可能会降低性能。
可能会降低性能:
FROM TABLE GROUP BY FIELD
改良:
FROM TABLE GROUP BY FIELD ORDER BY NULL
- 5、有些情况下可以用join代替子查询:因为使用join不会在内存中创建临时表
例如:
left join、right join
- 6、优先对where、order by后的字段创建索引,避免全表扫秒