分析 SQL 语句的一般步骤

analyse-sql

数据库的性能调优是一个很大的话题。但是对于开发人员来讲,掌握一些常用的 SQL 优化手段却不是什么难事。

从本章节开始,将连载总结常用的适合于开发人员的 SQL 优化手段与大家分享。

要想解决性能优化的问题,首先要想办法发现哪些 SQL 有性能问题。通过下面这几个手段可以比较准确的定位到有问题的 SQL 进行分析优化。

Show status 命令了解各种 SQL 的执行频率

在每一个 mysql session 中都可以使用 show status 命令查看当前数据库服务器的状态信息。如下所示:

Com_xxx 表示每个 xxx 语句执行的次数。具体每个参数的意思你可以通过官方手册进行查询。总而言之,show status 向你展示了当前 mysql 服务器的运行状态。

慢查询日志

慢查询日志是 mysql 自带的几种日志中的一种。它会自动的记录任何查询时间超出你设置的自定义时间的 sql 语句到你指定的日志目录中。通过慢查询日志可以定位到执行效率较低的具体的 SQL 语句。

打开慢查询日志的方法等由于每个版本的 mysql 都有不同,请查阅相关的官方文档。

Explain

通过慢查询日志,我们可以查询到效率低下的 SQL 语句。对于这些 SQL 语句又应该如何去分析它问题出在哪里呢?

explain select 语句所返回的结果包含了该查询语句的执行细节。

具体每一个列的含义可对照官方手册。这里我们只提最主要的一个列的含义【type】:访问类型。

常见的访问类型如下:

  • all 全表扫描
  • index 索引全表扫描。按照索引顺序扫描全表。避免排序工作。但实际上由于查询的字段不是在索引中,实际上还是走了全表扫描。
  • range 索引范围扫描 如: <、>、between 等操作符
  • ref 使用非唯一索引扫描或前缀扫描。
  • eq-ref 每次与之前的表合并行都只在该表读取一行,这是除了 system,const 之外最好的一种。
  • const、system 当检索条件对应到索引中为固定的值时,查询类型为 const。当查询的表只有一行时,查询类型为 system。
  • NULL 不需要检索表就能得到结果,如 select 1

从上到下,性能由最差到最好。一般来说,至少也要优化语句达到 range 这个等级。

Extra 列

show profile 分析 SQL

show profle 能够在做 SQL 优化时帮助我们了解时间都耗费到哪里去了。

通常来说,对于一般的开发人员来讲 Explain 已经足够解决问题了。对于相关 show profile 的信息请查阅 mysql 官方手册。

trace 分析优化器

mysql 5.6 提供了对 SQL 的跟踪 trace。该功能进一步展示了优化器是如何选择执行计划的。对于开发人员来讲,explain 是最常用的分析手段。若对 trace 有兴趣请查阅相关的 mysql 官方手册。

总结

性能优化最忌讳之一便是无用功优化。准确的找出问题 SQL 以及分析其原因,是优化 SQL 语句的第一步也是最重要的一步。

相关推荐
翔云12345612 分钟前
Gaea(小米MySQL Proxy)整体架构
运维·数据库·mysql
jaysee-sjc18 分钟前
【苍穹外卖】Day10:定时任务与 WebSocket 实时提醒实战
java·开发语言·javascript·数据库·vue.js·websocket·网络协议
牧瀬クリスだ28 分钟前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
瑞克-桑切斯29 分钟前
PostgreSQL 14.4 源码部署 & 运维手册(CentOS7)
数据库·学习·postgresql
上海红同电子36 分钟前
红同电子线束工厂100问|绝缘护套采购,材质PVC、TPE、PP该如何选型?
数据库·经验分享·职场和发展·产品运营·制造·材质
泡海椒1 小时前
JQuick-SQL “数据源 SPI”辨析:应用适配器与 Function SPI 的正确边界
数据库·驱动开发·sql
无毁的湖光-Al1 小时前
高可用之路-观测篇-那些年遇到过的指标幻觉
linux·数据库·tcp
段一凡-华北理工大学1 小时前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章02:走进热风炉:蓄热、换炉、送风的工艺机理
大数据·数据库·能源·高炉能源管控·热风炉·热风炉工作原理
紧跟先前的步伐1 小时前
Go AI Agent 实战 18|Tool Calling 的基本原理与完整执行流程
前端·数据库·人工智能·ai·golang·1024程序员节
EnCi Zheng2 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
大数据·数据库·人工智能