- 日常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后的字段创建索引,避免全表扫秒