MySQL优化WHERE子句

188 阅读1分钟
  1. 使用索引,在where或order by后面涉及的列上建立索引

  2. 避免在where子句中判断null,这将导致进行全表扫描;解决:可以通过0代替null

  3. 避免在where子句中使用!=或者<>,这将导致进行全表扫描

  4. 避免在where子句中使用or,这将导致进行全表扫描;解决:使用联合查询

  5. 避免在where子句中使用in和not in,这将导致进行全表扫描

  6. 下面的查询也将导致全表扫描:select id from t where name like ‘%李%’若要提高效率,可以考虑全文检索。

  7. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2=100-- 应改为: select id from t where num=100*2

  8. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where substring(name,1,3)=’abc’ -- name以abc开头的id应改为: select id from t where name like ‘abc%’

  9. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。