开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
前言
上篇我们学习了MySQL中的数据库优化之分析查询语句实战演示。有兴趣的小伙伴可以阅读(MySQL优化之分析查询语句实战演示(二))。
下面我们继续学习MySQL中的数据库优化之分析查询语句实战演示。
type
完整的访问方法如下:system,const,eq_ref,ref,fultext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL。
结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > range > index > ALL。SQL性能优化的指标:至少要达到range级别,要求是ref级别,最好是const级别。
EXPLAIN四种输出格式
EXPLAIN有四种格式输出:传统格式,JSON格式,TREE格式以及可视化输出。我们可以根据需要选择适用于自己的格式。
传统格式
输出一个表格形式,概要说明查询计划。即我们昨天学习输出的表格。
JSON格式
在EXPLAIN单词和真正的查询语句中间加上FORMAT=JSON。下面查看s1表中的cost_info成本部分:
const_info:{
read_cost: 1450.23,
eval_cost: 193.76,
prefix_cost: 2021.23,
data_read_per_join: 1M
}
- read_const是由两部分组成的:
- IO成本
- 检测rows * (1 - filter)条记录的CPU成本
- eval_cost是检测rows * filter条记录的成本。
- prefix_cost就是单独查询s1表的成本,也就是:read_const + eval_cost
- data_read_per_join表示在此次查询中需要读取的数据量
TREE格式
TREE格式是8.0.16版本之后引入的新格式,主要根据查询的各个部分之间的关系和各个部分的执行顺序来描述如何查询。
可视化输出
可以通过MySQL Workbench可视化查看MySQL的执行计划。通过点击Workbench的放大镜图标,即可生成可视化的查询计划。
分析优化器执行计划
设置trace,可以分析优化器执行计划,语法如下:
SET optimizer_trace=enabled=on,end_markers_in_json=on;
set optimizer_trace_max_mem_size=1000000;
开启后,可以分析以下语句:SELECT,INSERT,REPLACE,UPDATE,DELETE,EXPLAIN,SET,DECLARE,CASE,IF,RETURN,CALL。
今天先学习到这里,明天继续。