前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。 1.explain的作用 通过explain+sql语句可以知道如下内容: ①表的读取顺序。(对应id) ②数据读取操作的操作...
Distinct 表示mysql在发现第1个匹配行后,停止为当前的行组合匹配更多的行。 Not exists 表示mysql能够对查询进行left join优化,发现1个匹配left join 标准的行后,不再为前面的行组合在该表内检查更多的行。 range checked for each record(index map:#) 表示mysql没有发现好的可以使用的索引,但发现如果来自前面的...
MySQL能对LEFT JOIN优化,在找到符合LEFT JOIN的行后,不会为上一行组合中检查此表中的更多行。例如: 假设t2.id定义成了 ,此时,MySQL会扫描t1,并使用t1.id的值查找t2中的行。如果MySQL在t2中找到一个匹配的行,它会知道t2.id永远不会为NULL,并且不会扫描t2中具有相同id值的其余行。也就是说,对于t1中的每...
EXPLAIN是MySQL官方提供的sql分析的工具之一,可以用于模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。EXPLAIN主要用于分析查询语句或表结构的性能瓶颈。以下是基于MySQL5.7.19版本进行分析的,不同版本之间略有差异。1、EXPLAIN使用 explain+sql语句,通过执行explain可以获得sql语句执行的相关信息。2、EXPLAIN...
rows字段表示MySQL估计需要扫描的行数。这个数值越大,说明查询越有可能进行全表扫描,性能越差。 示例: AI检测代码解析 sql EXPLAIN SELECT * FROM users WHERE name LIKE 'A%'; 1. 2. 如果name字段上没有合适的索引,rows字段可能会显示较大的数值,表明查询效率较低。
NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。 下面进行实例讲解 #表结构#索引在coupon_id和status_type上CREATETABLE`user_coupons`(`id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'id',`key_id`varchar(255)NOTNULLCOMMENT'key',`coupo...
explain是MySQL中的一个关键字,可以用于模拟优化器执行SQL语句,分析你的SQL的性能瓶颈。 使用时只需将该关键字加在sql头部,如 explain select * from employees where name = 'zhangsan' 案例 explain返回的结果有许多字段,我们又当如何理解呢? 以下有张员工记录表,联合索引:name_age_position ...
MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。 一.语法 explain sql语句 1. 二.explain输出解释 +---+---+---+---+---+---+---+---+---+---+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows...
EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句。在select语句之前增加explain关键字,执行后MySQL就会返回执行计划的信息,而不是执行sql。但如果from中包含子查询,MySQL仍会执行该子查询,并把子查询的结果放入临时表中。它显示了mysql如何使用索引来...