常见SQL优化
- 比较运算符能用"="就不用“<>”:“=”增加了索引的使用几率。
- 已经知道只有一条查询结果,使用“limit 1”:使用“limit 1”可以避免全表扫描,找到对应的结果就不会再继续扫描。
- 为列选择合理的数据类型:能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,因为磁盘和内存消耗越小越好。
- 将大的INSERT、DELETE、UPDATE查询语句变成多个小查询:可以达成更好的性能和更好的数据控制。
- 使用UNION ALL代替UNION,如果结果集允许重复的话:因为UNION ALL不去重,效率高于UNION。
- 为获得相同的结果集的多次执行,保持SQL语句前后一致:这样做目的是充分利用查询缓冲,如
SELECT name FROM user WHERE id= 123 and pass=456;
在第二次同样的查询,保持和第一次的一致性,如where后面的id和pass的顺序要不能改变 - 尽量不使用“SELECT *”:如果不查询表中所有列,尽量不要使用SELECT * ,因为它会进行全表扫描,无法有效利用索引,增大了服务器的负担,以及它和应用程序客户端之间的网络IO开销。
- WHERE字句子句里面的列尽量被索引:尽量不是必须
- JOIN子句里面的列尽量被索引:同样是尽量而不是必须
- ORDER BY的列尽量被索引: ORDER BY的列如果被索引,性能会更好
- 使用LIMIT实现分页逻辑:不仅提高性能,而且减少了不必要的数据库和应用之间的网络传输。
- 使用EXPLAIN关键字去查看执行计划:EXPLAIN可以检查索引使用情况以及扫描的行,EXPLAIN命令是查看优化器如何决定执行查询的主要方法,可以用于SQL调优。