首页 理论教育 Java服务端研发知识图谱:EXPLAIN分析结果

Java服务端研发知识图谱:EXPLAIN分析结果

时间:2023-11-22 理论教育 版权反馈
【摘要】:图10-3 全表扫描EXPLAIN执行结果执行explain命令后,展现信息有10列,分别是id、select_type、table、type、possible_ keys、key、key_len、ref、rows、Extra,下面对这些字段进行讲解:■id:SELECT识别符。图10-5 多表关联查询EXPLAIN执行结果5)ref:查询条件索引既不是UNIQUE也不是PRIMARY KEY的情况。图10-6 索引关联查询EXPLAIN执行结果6)Range:只检索给定范围的行,使用一个索引来选择行。图10-7 范围查询EXPLAIN执行结果7)Index:Full Index Scan,index与ALL的区别是index类型只遍历索引树。

Java服务端研发知识图谱:EXPLAIN分析结果

在日常工作中,可以通过开启慢查询记录一些执行时间比较久的SQL语句,设置的具体步骤如下:

1)将slow_query_log全局变量设置为“ON”状态。

set global slow_query_log='ON';

2)设置慢查询日志存放的位置。

set global slow_query_log_file='/var/log/mysql/slow.log'[3]

3)设置查询超过4s就记录。

set global long_query_time=4;

通过上面设置,在log文件中记录了超过4s的SQL语句,可以用explain命令来查看这些SQL语句的执行计划,查看SQL语句有没有使用索引,有没有全表扫描。例如查看查询商品语句的执行计划:

EXPLAIN SELECT*FROM product

执行结果如图10-3所示。

978-7-111-61011-3-Part03-26.jpg

图10-3 全表扫描EXPLAIN执行结果

执行explain命令后,展现信息有10列,分别是id、select_type、table、type、possible_ keys、key、key_len、ref、rows、Extra,下面对这些字段进行讲解:

■id:SELECT识别符。这是SELECT查询序列号

■select_type:表示查询中每个select子句的类型。

■table:表示查询的表。

■type:表示MySQL在表中找到所需行的方式,又称“访问类型”。

常用的类型有:NULL、system、const、eq_ref、ref、range、index、ALL(从左到右,性能从好到差)。

1)NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

2)system:表仅有一行,这是const类型,一般不会出现,可以忽略不计。

3)const:数据表最多只有一个匹配行,因为只匹配一行数据,所以很快,常用于PRIMARY KEY或者UNIQUE索引的查询,可以认为const是最优化的。如图10-4所示。

978-7-111-61011-3-Part03-27.jpg(www.xing528.com)

图10-4 主键查询EXPLAIN执行结果

4)eq_ref:使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者unique key作为关联条件。这里演示使用方式,添加一个订单表t_order。表结构如下:

978-7-111-61011-3-Part03-28.jpg

注意t_order表的product_id与商品表product的id字段进行关联。如图10-5所示。

978-7-111-61011-3-Part03-29.jpg

图10-5 多表关联查询EXPLAIN执行结果

5)ref:查询条件索引既不是UNIQUE也不是PRIMARY KEY的情况。ref可用于“=”操作符的带索引的列。这里以product表的price字段进行演示,此字段需建立索引。如图10-6所示。

978-7-111-61011-3-Part03-30.jpg

图10-6 索引关联查询EXPLAIN执行结果

6)Range:只检索给定范围的行,使用一个索引来选择行。注意product表的price字段建立了索引。如图10-7所示。

978-7-111-61011-3-Part03-31.jpg

图10-7 范围查询EXPLAIN执行结果

7)Index:Full Index Scan,index与ALL的区别是index类型只遍历索引树。

8)ALL:MySQL将遍历全表以找到匹配的行(性能最差)。

■possible_keys:指出MySQL能使用哪个索引在该表中找到行。如果该列为NULL,说明没有使用索引,可以对该列创建索引来提高性能。

■key:显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。可以强制使用索引或者忽略索引。

■key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

■ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

■rows:显示MySQL认为它执行查询时必须检查的行数。

■Extra:该列包含MySQL解决查询的详细信息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈