1.选择有效率的表连接顺序
这个你要了解SQL语句执行的过程,就比如from:子句--执行顺序为从后往前、从右到左,表名(最后面的那个表名为驱动表,执行顺序为从后往前, 所以数据量较少的表尽量放后)。
2.避免使用*
SQL解析的时候,需要将 * 转换为所有列名,这个工作需要依靠数据字典来完成。
3.用where子句替换having子句
where子句搜索条件在进行分组操作之前应用;而having自己条件在进行分组操作之后应用。
避免使用having子句,having子句只会在检索出所有纪录之后才对结果集进行过滤,这个处理需要排序,总计等操作。
4.使用索引来避免排序操作
order by后面的字段上建有索引,将会大大提升效率!
5.不要在选择性较低的字段建立索引(enum枚举类型)
6.避免对列的操作
这点非常重要,不要在where条件中对字段进行数学表达式运算,任何对列的操作都可能导致全表扫描。
7.尽量去掉"IN",“OR”
含有"IN"、"OR"的where子句常会使用工作表,使索引失效。
8.用exists、not exists和in、not in相互替代
IN适合于外表大而内表小的情况;exists适合于外表小而内表大的情况,自己理解下。