mysql优化一个基本的原则:任何一条sql都应该避免全表扫描
- 在where,order by,group by 所涉及的列上建立索引
- 避免对字段进行null值的判断
- 避免在where条件语句中使用!= / <>操作符
- where 语句中使用or会致使放弃索引
- in 与not in 应该慎用,对于连续的数值,应该优先考虑使用between
- like '%adb%' 也会导致全表扫描,可以考虑全文检索
- 应该尽量避免对字段进行表达式操作 比如:select id from test where id/2 = 100;
- 避免where语句中对字段进行函数操作 比如:select id from t where substring(name,1,3) = 'abc' 应改为:select id from t where name='abc%'
- where 语句的左边都不应该进行函数,算术运算及其他表达式的运算
- 索引为复合索引的时候,索引中的第一个字段作为条件时,索引才会生效。比如复合索引(city+id),select id from t order id;此时的索引不会生效
- 很多时候使用exist 代替in 比较好
- 索引字段有大量的重复数据时,查询的效率不会很高
- 索引数不应该超过6个
- 尽量使用数字类型字段
- 任何时候不用使用slect * from t