当前位置:首页 > 每日看点 > 正文内容

MySQL索引优化器选择索引的规则是什么?

卡卷网1年前 (2025-01-01)每日看点219

<>这次是拯救了我,MySQL索引优化,explain讲得非常清楚了!

<>前言:

这篇文章主要讲explain如何使用,还有explain各种参数概念,之后会讲优化

一、Explain用法

模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

语法:Explain+SQL语句;

如:Explainselect*fromuser;会生成如下SQL分析结果,下面详细对每个字段进行详解

二、id

是一组数字,代表多个表之间的查询顺序,或者包含子句查询语句中的顺序,id总共分为三种情况,依次详解

    id相同,执行顺序由上至下id不同,如果是子查询,id号会递增,id值越大优先级越高,越先被执行id相同和不同的情况同时存在

三、select_type

select_type包含以下几种值

    primarysuqueryderivedunionunionresult

<>

简单的select查询,查询中不包含子查询或者union查询

<>primary

如果SQL语句中包含任何子查询,那么子查询的最外层会被标记为primary

<>suquery

在select或者where里包含了子查询,那么子查询就会被标记为suQquery,同三.二同时出现

<>derived

在from中包含的子查询,会被标记为衍生查询,会把查询结果放到一个临时表中

<>union/unionresult

如果有两个select查询语句,他们之间用union连起来查询,那么第二个select会被标记为union,union的结果被标记为unionresult。它的id是为null的

四、tale

表示这一行的数据是哪张表的数据

五、type

type是代表MySQL使用了哪种索引类型,不同的索引类型的查询效率也是不一样的,type大致有以下种类

    consteq_refrefrangeindexall

<>

表中只有一行记录,是const的特例,几乎不会出现这种情况,可以忽略不计

<>const

将主键索引或者唯一索引放到where条件中查询,MySQL可以将查询条件转变成一个常量,只匹配一行数据,索引一次就找到数据了

<>eq_ref

在多表查询中,如T1和T2,T1中的一行记录,在T2中也只能找到唯一的一行,说白了就是T1和T2关联查询的条件都是主键索引或者唯一索引,这样才能保证T1每一行记录只对应T2的一行记录

举个不太恰当的例子,EXPLAINSELECT*fromt1,t2wheret1.id=t2.id

<>ref

不是主键索引,也不是唯一索引,就是普通的索引,可能会返回多个符合条件的行。

<>range

体现在对某个索引进行区间范围检索,一般出现在where条件中的etween、and、<、>、in等范围查找中。

<>index

将所有的索引树都遍历一遍,查找到符合条件的行。索引文件数据文件还是要小很多,所以不用索引全表扫描还是要快很多。

<>all

没用到索引,单纯的将表数据全部都遍历一遍,查找到符合条件的数据

六、possile_keys

此次查询中涉及字段上若存在索引,则会被列出来,表示可能会用到的索引,但并不是实际上一定会用到的索引

七、key

此次查询中实际上用到的索引

八、key_len

表示索引中使用的字节数,通过该属性可以知道在查询中使用的索引长度,注意:这个长度是最大可能长度,并非实际使用长度,在不损失精确性的情况下,长度越短查询效率越高

九、ref

显示关联的字段。如果使用常数等值查询,则显示const,如果是连接查询,则会显示关联的字段。

    t_emp表为非唯一性索引扫描,实际使用的索引列为idx_name,由于t_emp.name='rose'为一个常量,所以ref=const。t_dept为唯一索引扫描,从sql语句可以看出,实际使用了PRIMARY主键索引,ref=d01.t_emp.deptid表示关联了d01数据库中t_emp表的deptid字段。

十、rows

根据表信息计以及索引的使用情况,大致估算说要找到所需记录需要读取的行数,rows越小越好

十一、extra

不适合在列显示出来,但在优化时十分重要的信息

<>usingfileSort(重点优化)

俗称"文件排序",在数据量大的时候几乎是“九死一生”,在ordery或者在groupy排序的过程中,ordery的字段不是索引字段,或者select查询字段存在不是索引字段,或者select查询字段都是索引字段,但是ordery字段和select索引字段的顺序不一致,都会导致fileSort

<>usingtemporary(重点优化)

使用了临时表保存中间结果,常见于ordery和groupy中。

<>USINGindex(重点)

表示相应的select作中使用了覆盖索引(CoveingIndex),避免访问了表的数据行,效率不错!如果同时出现usingwhere,表明索引被用来执行索引键值的查找;如果没有同时出现usingwhere,表面索引用来读取数据而非执行查找动作。

<>Usingwher

表明使用了where过滤

<>usingjoinuffer

使用了连接缓存

<>impossilewhere

where子句的值总是false,不能用来获取任何元组

<>selecttalesoptimizedaway

在没有GROUPY子句的情况下,基于索引优化MIN/MAX作或者对于MyAM存储引擎优化COUNT(*)作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

<>distinct

优化distinct,在找到第一匹配的元组后即停止找同样值的工作

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6109.html

分享给朋友:

相关文章

那些极速版软件其存在目的是什么?

那些极速版软件其存在目的是什么?

我看了很多回答,其实都没有回答道点子上。你知道极速版APP为什么叫极速版吗?是他看视频更快吗?显然不是。只是它的安装包体积更小,下载安装速度更快而已,所以叫极速版app。当然啦,现在极速版APP和原声版APP,安装包已经没有区别了,这是因为...

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯神贴合集完整版,给大家整理好了!那年大学,打开天涯,感觉打开了一片新天地,里面什么样的人都有,有大神也有蛇神,比某乎好太多了,可惜后面关了很多年前,天涯社区曾出现了不少深受欢迎的帖子,成功地预言了许多形势和事件。这些帖子因此被冠以“天涯...

手机的运行内存真的有必要上16GB吗?

全是国产垃圾APP惯出来的。那些对国产软件没意见的人,建议出国看看,花不了多少钱,出门开 Google Map,订宾馆用 Booking,翻译用 Google translate,聊天用 Telegram,社交活动用 Discord,你会惊...

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么?这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克服...

为什么雷军身上没有酒色财气?

武大建校130周年时,雷军向母校个人捐款13亿。在2023年8月14日晚上七点,雷总在国家会议中心举行的进行第四次年度演讲「成长」:全篇都在谈成长、梦想,这么多年了,始终做到了知行合一,我相信酒色财气可能真不是他所追求的,一直追求的就像他演...

面试官问“你的SQL能力怎么样?”时应该如何回答?

面试官问“你的SQL能力怎么样?”时应该如何回答?

如果面试时被问你SQL能力怎么样?要么是考查一下题目,怎么写SQL语句。要么是问SQL优化相关的,更容易问出一个人的水平。sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。如果某天你负责的某个线上接口,出...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。