百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql索引命中法则解说
分享文章到:

mysql索引命中法则解说

发布时间:09/01 来源:未知 浏览: 关键词:

第一我们来理解一下最左匹配原则,如下:

1、先定位该sql的查询前提,是什么,那些是等值的,那些是范畴的前提。

2、等值的前提去命中索引最左边的一个字段,然后顺次从左往右命中,范畴的放在最后。

剖析讲解

1、mysql的索引分为聚簇索引和非聚簇索引,mysql的表是汇集索引组织表。

汇集规则是:有主键则定义主键索引为汇集索引;没有主键则选第一个不同意为NULL的独一索引;还没有就使用innodb的内置rowid为汇集索引。

(免费学习视频教程引荐:mysql视频教程)

非汇集索引也称为二级索引,或者辅助索引。

2、mysql的索引不管是汇集索引还是非汇集索引,都是B+树构造。汇集索引的叶子节点存置的是数据,非汇集索引的叶子节点存置的是非汇集索引的key和主键值。B+树的高度为索引的高度。

3、索引的高度

汇集索引的高度决议了按照主键取数据的理论IO次数。按照非汇集索引读取数据的理论IO次数还要加上拜访汇集索引的IO次数总和。实际上大概要不了这么多IO。由于索引的分支节点所在的Page由于屡次读取会在mysql内存里cache住。

mysql的一个block大小默许是16K,可以按照索引列的长度粗略预算索引的高度。

sql优化根据

SQL语句中的where前提,使用以上的提取规则,终究都会被提取到Index Key (First Key & Last Key),Index Filter与Table Filter之中。

Index First Key,只是用来定位索引的起始范畴,因此只在索引第一次Search Path(沿着索引B+树的根节点不断遍历,到索引准确的叶节点位置)时使用,一次推断即可;

Index Last Key,用来定位索引的终止范畴,因此关于起始范畴之后读到的每一条索引记载,均需要推断可否已经超越了Index Last Key的范畴,若超越,则当前查询完毕;

Index Filter,用于过滤索引查询范畴中不知足查询前提的记载,因此关于索引范畴中的每一笔记录,均需要与Index Filter停止对照,若不知足Index Filter则直接抛弃,连续读取索引下一笔记录;

Table Filter,这是最后一道where前提的防线,用于过滤通过前面索引的层层考查的记载,此时的记载已经知足了Index First Key与Index Last Key构成的范畴,并且知足Index Filter的前提,回表读取了完全的记载,推断完全记载可否知足Table Filter中的查询前提,一样的,若不知足,跳过当前记载,连续读取索引的下一笔记录,若知足,则返回记载,此记载知足了where的所有前提,可以返回给前端会员

剖析

一条sql语句要施行完成需要经历什么样的历程?

当一条sql语句提交给mysql数据库停止查询的时候需要经历以下几步:

1、先在where解析这一步把当前的查询语句中的查询前提分解成每一个独立的前提单元;

2、mysql会主动将sql拆分重组;

3、然后where前提会在B-tree index这部分停止索引匹配,假如命中索引,就会定位到指定的table records位置。假如没有命中,则只能采纳全部扫描的方式;

4、按照当前查询字段返回对应的数据值。

如下图:

b49c742c7bbbac9c632bf3ffe6750b9.png

相关文章教程引荐:mysql教程

以上就是mysql索引命中规则讲解的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板