查询应尽量避免全表扫描,考虑在where及order by 涉及的列上建立索引。
尽量避免where子句对字段进行null值判断,创建表时null是默认值,但大多数时候应该使用not null
应尽量避免在where 子句中使用!=或<>操作符,Mysql只对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN 以及某些时候的LIKE。
尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,可以使用union合并查询
in和not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用between就不要用in
下面查询也将导致全表扫描:select id from t where name like '%abc%' 或者 select id from t where name like '%abc' 若要提高效率,可以考虑全文检索。而select id from t where name like 'abc%' 才用到索引。
如果在 where 子句中使用参数,也会导致全表扫描