1. 对查询进行优化, 应尽量避免全表扫描, 首先应考虑在 where 及 order by 涉及的列上建立索引.
2. 尽量避免在 where 子句中对字段进行 null 值判断, 否则将导致引擎放弃使用索引而进行全表扫描.
3. 应尽量避免在 where 子句中使用!= 或 <> 操作符, 否则引擎将放弃使用索引而进行全表扫描.
4. 应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描.
5. 应尽量避免在 where 子句中使用 in 和 not in , 否则会导致全表扫描.
6. 应尽量避免在 where 子句中使用 like, 否则会导致全表扫描.
7. 如果在 where 子句中使用参数, 也会导致全表扫描. 因为 SQL 只有在运行时才会解析局部变量, 但优化程序不能将访问计划的选择推迟到运行时; 它必须在编译时进行选择. 然 而, 如果在编译时建立访问计划, 变量的值还是未知的, 因而无法作为索引选择的输入项.
8. 应尽量避免在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表扫描.
9. 应尽量避免在 where 子句中对字段进行函数操作, 这将导致引擎放弃使用索引而进行全表扫描.
10. 不要在 where 子句中的 "=" 左边进行函数, 算术运算或其他表达式运算, 否则系统将可能无法正确使用索引.
11. 在使用索引字段作为条件时, 如果该索引是复合索引, 那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引, 否则该索引将不会被使用, 并且应尽可能的让字段顺序与索引顺序相一致.
12. 并不是所有索引对查询都有效, SQL 是根据表中数据来进行查询优化的, 当索引列有大量数据重复时, SQL 查询可能不会去利用索引, 如一表中有字段 sex,male,female 几乎各一半, 那么即使在 sex 上建了索引也对查询效率起不了作用.
13. 索引并不是越多越好, 索引固然可 以提高相应的 select 的效率, 但同时也降低了 insert 及 update 的效率, 因为 insert 或 update 时有可能会重建索引, 所以怎样建索引需要慎重考虑, 视具体情况而定.
来源: https://www.cnblogs.com/Jasonchan1994/p/10549736.html