MySQL系列(26): EXPLAIN,Schema,索引,慢查询,优化器
数据库的性能取决于许多因素,主要是查询,schema,配置项,硬件。
- 检查查询计划:EXPLAIN FORMAT
- 分析查询执行:EXPLAIN ANALYZE
- 了解计划选择:OPTIMIZER TRACE
执行计划
EXPLAIN
MySQL 执行查询的方式是影响数据库性能的主要因素之一。可以使用 Explain
命令来验证MySQL的执行计划。
从 MySQL 5.7.2 开始,可以使用 EXPLAIN 命令来检查当前在其他会话中执行的查询。
可以使用 EXPLAIN FORMAT = JSON 命令来输出详细信息。
EXPLAIN 执行计划提供了关于 查询优化器 如何执行查询的信息,只需将 EXPLAIN 关键字作为 SQL 语句的前缀执行即可。详细可参考官方文档 8.8.2 EXPLAIN Output Format。
1 | mysql> EXPLAIN SELECT |
EXPLAIN FORMAT
EXPLAIN FORMAT=JSON
以 JSON 格式输出 EXPLAIN 计划,能提供有关查询执行情况的完整信息:
1 | mysql> EXPLAIN FORMAT=JSON SELECT |
EXPLAIN FORMAT=TREE
1 | mysql> EXPLAIN FORMAT=TREE SELECT |
EXPLAIN ANALYZE
1 | mysql> EXPLAIN ANALYZE SELECT |
EXPLAIN 会话
可以为正在运行的会话执行 Explain 计划,但要指定会话ID(connection ID)。
1 | -- 获取当前连接的会话ID |
基准查询
EXPLAIN 给出的是 SQL 的执行计划分析结果,并没有明确给出 SQL 的执行耗时。
如果要评估某一条SQL的执行耗时,使用 pager grep rows
命令,只返回结果行数和耗时,精确到 100 ms。
1 | mysql> pager grep rows; |
模拟负载
可以使用 mysqlslap
模拟客户端负载,并在多个迭代中并行运行某条SQL,可以得出平均耗时。
查看优化后的SQL
查看经过优化器优化后真正执行的 SQL, 在 EXPLAIN 的扩展警告信息(SHOW WARNINGS)中可以明显看到被重写的查询语句。
1 | mysql> EXPLAIN SELECT * FROM t1 WHERE f1 + 1 > 9; |
注意:EXPLAIN EXTENDED
已弃用。
相关参考
MySQL系列(26): EXPLAIN,Schema,索引,慢查询,优化器
http://blog.gxitsky.com/2021/03/03/MySQL-26-Optimizing-tools/