首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MYSQL EXPLAIN结果详解

EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。 1 id select的识别符,这是select的查询序列号。...( 列与索引的比较,表示上述表的连接匹配条件。) 10 rows MySQL认为它执行查询时必须检查的行数既预估扫描的行数。 11 filtered 通过表条件过滤出的行数的百分比估计值。...12 Extra Mysql执行情况的描述和详细说明。 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

2.6K30

【MySQL】语句执行分析

filtered 显示了通过条件过滤出的行数的百分比估计值。 Extra 该列包含MySQL解决查询的详细信息Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...ref显示使用哪个列或常数与key一起从表中选择行。rows显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...filtered显示了通过条件过滤出的行数的百分比估计值。Extra该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

1.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql explain用法和结果的含义

    ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...filtered 显示了通过条件过滤出的行数的百分比估计值。 Extra 该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    2.1K10

    MySQL优化总结

    (2)ON:join on实现多表连接查询,先筛选on的条件,再连接表 (3)JOIN:将join两边的表根据on的条件连接 (4)WHERE:从基表或视图中选择满足条件的元组 (5)GROUP BY...ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...ref显示使用哪个列或常数与key一起从表中选择行。rows显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    1.7K40

    MYSQL优化有理有据全分析(面试必备)

    ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。...· Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...子查询虽然很灵活,但是执行效率并不高。 执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响。...禁用唯一性检查 唯一性校验会降低插入记录的速度,可以在插入记录之前禁用唯一性检查,插入数据完成后再开启。...InnoDB 禁用唯一性检查 用法和MyISAM一样。 禁用外键检查 插入数据之前执行禁止对外键的检查,数据插入完成后再恢复,可以提供插入速度。

    1.3K30

    真正线上索引失效的问题是如何排查的

    explain select * from t2 where a > 'a' and a < 'c'; 在这里,使用了索引执行范围查询操作。 index:全索引扫描,会遍历索引树来查找匹配的行。...以下是"extra"可能的取值及其含义: Using where:表示MySQL在存储引擎检索行后,再进行条件过滤(使用WHERE子句)。...Range checked for each record:表示MySQL在使用索引范围查找时,需要检查每一条记录。...优化器会根据成本估算做出这个决定。 以下是可能导致没有使用索引的几种情况: 索引未正确创建:如果查询语句中的where条件字段没有创建索引,或者不符合最左前缀匹配的情况,就是未正确创建索引。...查询中的索引字段使用了函数、类型不一致等导致索引失效。 针对这些情况,我们需要逐一分析: 如若索引未正确创建,根据SQL语句创建适当的索引。如果不符合最左前缀,调整索引或修改SQL语句。

    17210

    MySQL学习——优化

    10000行数据一般来说是一个比较高效并且对服务器影响较小的方法,如果在每次删除以后,隔一段时间再进行删除,可以将服务器上面的压力一次性分散到一个很长的时间段中,就可以大大降低对服务器的影响,还可以大大减少删除时锁的持有时间...B-Tree能够加快访问速度,因为按条件查询数据时,如果满足索引查询条件,存储引擎不需要进行全表扫描,而是从索引的根节点开始进行搜索。根节点中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。...分表、分库 检查耗时 show profiles 用于查看执行语句的耗时,不过默认情况下,profiles是关闭的,可以通过set profiling=1;开启profiles。...rows:估计需要扫描的行数 Extra:显示以上信息之外的其他信息 (1)Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...(2)Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。

    74510

    Mysql EXPLAIN 实战

    ref:查询条件索引既不是UNIQUE也不是PRIMARY KEY的情况。ref可用于=或操作符的带索 引的列。...这时要提高性能,可通过 检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。 6) key:实际使用到的索引。 如果为NULL,则没有使用索引。...8) ref:显示使用哪个列或常数与key一起从表中选择行。 9) rows:显示MySQL认为它执行查询时必须检查的行数。...(越少越好) Extra 执行状态说明,该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面 的的行组合在该表内检查更多的行。

    1.1K10

    Mysql中explain用法和结果字段的含义介绍

    ,不是通过表内检索出的) ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 rows 显示MySQL认为它执行查询时必须检查的行数。...Extra 该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或...EXPLAIN不考虑各种Cache EXPLAIN不能显示MySQL在执行查询时所作的优化工作 部分统计信息是估算的,并非精确值 EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

    62140

    技术分享 | MySQL 生产环境 GROUP BY 优化实践

    reportTime > '2024-04-07' GROUP BY taskUniqueId SQL 优化后:执行时间 30ms!...执行时,会生成临时表进行分组。可以通过索引来优化,来避免使用临时表。 表上有索引。...聚合函数使用的列,必须包含在索引上;且使用多个聚合函数时,必须使用相同的字段,且 GROUP BY 字段+聚合函数字段也必须满足最左匹配原则。...从 ENGINE 层读取数据,返回给 SERVER 层 SERVER 层判断是否符合 WHERE 条件的记录,并根据聚合函数进行处理 可以看到,对于 ENGINE 层的访问,Loose Index Scan...示意图 两种算法结合 最后,再回到文章开头的案例,其执行计划如下: 优化前 优化后 其核心就是将紧凑索引扫描转化为了松散索引扫描。

    8310

    mysql小结(1) MYSQL索引特性小结

    使用哪个索引由相应索引项的选择率决定,最终判定标准是:扫描最少的行.使用索引过滤尽可能多的行。然后使用where中其他条件对 索引过滤后的结果集 一行行地判断 完成where条件过滤。...,当用户查询一个范围中的结果时,另一个事务执行了相应的插入删除操作,导致两次查询结果不同,少了或多了一些行,就像幻象一样。...例如本事务开启后,其他事务插入删除了相关数据并提交,本事务是无法察觉的。实现方式为 版本控制。...对前面表的每个行组合,MySQL检查是否可以使用range或 index_merge访问方法来索取行。...SELECT tables optimized away:当我们使用某些聚合函数来访问存在索引的某个字段时,MySQL Query Optimizer 会通过索引直接一次定位到所需的数据行完成整个查询。

    1.1K30

    mysql explain用法和结果的含义

    ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行。

    2.2K20

    全网最全 | MySQL EXPLAIN 完全解读

    例如:explain select 1 15 Not exists MySQL能对LEFT JOIN优化,在找到符合LEFT JOIN的行后,不会为上一行组合中检查此表中的更多行。...这将删除子查询并将其表放入最顶层的查询计划中,从而改进查询的开销。通过合并半连接和反联接,优化器可以更加自由地对执行计划中的表重新排序,在某些情况下,可让查询提速。...一般在用某些聚合函数访问存在索引的某个字段时,优化器会通过索引直接一次定位到所需要的数据行完成整个查询时展示,例如下面这条SQL。...例如: explain SELECT id FROM t 30 Using index condition 表示先按条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行...在数据量变得太大而无法缓存后,将会变慢很多,直到你的应用程序受到磁盘搜索约束(按照log N增长)。为了避免这种情况,可以根据数据的增长而增加key的。

    1.8K20

    普通程序员必须掌握的SQL优化技巧

    在不损失精确性的情况下,长度越短越好 ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...filtered 显示了通过条件过滤出的行数的百分比估计值。 Extra 该列包含MySQL解决查询的详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。...,不再为前面的的行组合在该表内检查更多的行。...:这些函数说明如何为index_merge联接类型合并索引扫描。...根据上述表格,可以在执行计划分析上提供很好的帮助。 注意:如果是为了应付面试,最好是能背下来,不能全背下来的情况,也要能说上个123,然后就说,记不得这么多,可以翻阅相关文档来对照着优化SQL。

    85460

    查看Mysql执行计划

    对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好。...在不损失精确性的情况下,长度越短越好 5、ref 显示的是列的名字,显示索引的哪一列被使用了,MySQL将根据这些列来选择行,如果可能的话,是一个常数 。...mysql需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。...reading const tables:MySQL Query Optimizer 通过收集到的统计信息判断出不可能存在结果; Select tables optimized away:当我们使用某些聚合函数来访问存在索引的某个字段的时候...如使用MIN()或者MAX()的时候; Range checked for each Record(index map:#) :没有找到理想的索引,因此对从前面表中来的每一个行组合,mysql检查使用哪个索引

    3.3K10

    MySQL入门详解(二)---mysql事务、锁、以及优化

    该事物就要等待锁释放 行级锁特点:innoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件(例如id)检索数据,innoDB才使用行级锁,佛则将使用表锁;意向锁是innoDB自动加的,不需要用户干预...索引在内存中占的长度(轻易不要给varchar加索引) #ref 指定的条件类型 #rows 当前语句查到的行数 #Extra Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...:这些函数说明如何为index_merge联接类型合并索引扫描。...Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或

    1.1K50

    详解Mysql执行计划explain

    对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好。...mysql需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。...reading const tables:MySQL Query Optimizer 通过 收集到的统计信息判断出不可能存在结果; Select tables optimized away:当我们使用某些聚合函数来访问存在索引的某个字段的...总结 • EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 • EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作...• 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

    95820

    mysql explain用法和结果的含义

    map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。...它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候...ref 显示使用哪个列或常数与key一起从表中选择行。 rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。...Not exists:MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的行后,不再为前面的的行组合在该表内检查更多的行。...此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行。

    1.5K10
    领券