浅谈SQL优化小技巧 | 京东云技术团队
内容提要
本文介绍了MySQL查询语句的执行过程和SQL语句性能优化的常用策略,包括建立索引、避免使用NULL值、慎用操作符和连接条件、避免模糊查询、使用参数、使用EXISTS代替IN、合理使用索引、使用数字型字段、使用变长字段、避免使用SELECT *、预先计算结果、优化GROUP BY语句、避免死锁、批量插入和更新、过滤不需要的记录、使用explain分析执行计划、使用LIMIT 1、将大查询拆分成小查询、合理分表等。
关键要点
-
客户端发送查询语句到服务器。
-
服务器查询缓存,命中则返回数据。
-
未命中缓存时,MySQL解析SQL语句并生成解析树。
-
预处理检查解析树的合理性和权限。
-
结果返回客户端并进行缓存。
-
在WHERE及ORDER BY列上建立索引以优化查询。
-
避免在WHERE子句中使用NULL值,使用默认值代替。
-
慎用操作符!=和<>,可能导致全表扫描。
-
慎用OR连接条件,建议使用UNION合并查询。
-
慎用IN和NOT IN,使用BETWEEN替代连续数值。
-
避免使用左模糊查询,尽量使用右模糊查询。
-
WHERE条件使用参数可能导致全表扫描。
-
使用EXISTS代替IN以提高查询效率。
-
索引并不是越多越好,需合理创建。
-
尽量使用数字型字段以提高性能。
-
使用变长字段(varchar)代替固定长度字段(char)。
-
避免使用SELECT *,应指定具体字段。
-
将查询结果预先计算好以提高效率。
-
IN后出现最频繁的值放在最前面以减少判断次数。
-
使用批量插入或更新以提高效率。
-
在GROUP BY之前过滤不需要的记录以提高效率。
-
避免死锁,保持一致的访问顺序。
-
索引创建规则包括主键、外键和高选择性字段。
-
减少SQL语句中的空格使用。
-
每张表设置一个ID作为主键,推荐使用INT型。
-
使用EXPLAIN分析SQL执行计划以优化查询。
-
使用LIMIT 1提高查询性能。
-
将大的DELETE、UPDATE、INSERT查询拆分成小查询。
-
合理分表,控制单表数据量在500万以内。