浅谈SQL优化小技巧 | 京东云技术团队

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

本文介绍了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万以内。

➡️

继续阅读