分析 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 语句的第一步也是最重要的一步。

相关推荐
科技小花2 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56613 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全4 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717214 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
小江的记录本5 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai5 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw05 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209256 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256736 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑