MySQL   发布时间:2022-05-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MySQL索引的学习总结大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_755_2@mysqL的索引机制,做一点简单的总结和信息梳理吧。由于刚刚开始学习,如果哪里我理解的有误,还请大家提出宝贵意见。

@H_755_2@mysqL中索引被称为“键(key)”。

进行通信。MysqL服务器逻辑架构图从上到下为:

@H_755_2@mysqL独有]

查询缓存  or 解析器  or  优化器)       ---[@H_755_2@mysqL核心服务功能]

提取]

查询的数据。

提取连续数据的时候数据本身就是有序的。我们都知道group   by 比order  by 仅仅多了后面一步分组操作,也就是两者均会排序。所以如果建立的索引能够满足排序请求,则该索引就能避免本次查询中的排序。

@H_755_2@mysqL自动创建并用来存储某些中间数据的,这一操作发生在优化或者执行阶段。这种临时表的数据存储在内存当中。如果可以通过索引直接获得group by 结果,则可以不用使用临时表来group by了。

随机I/O变为顺序I/O。

磁盘不同页中,那么最坏的情况下每条记录都会导致一次磁盘I/O。但是如果SELEct语句查询的列为索引中的列,因为索引是按照列值顺序存储的,所以对于I/O密集型的范围查询会比随机从磁盘读取每一行数据的I/O少得多。这也是覆盖索引的优势之一。

@H_755_2@mysqL常用的B-Tree索引机制介绍:

@H_755_2@mysqL的引擎我们主要讨论InnoDB,关于索引我们主要讨论B-Tree。

@H_755_2@mysqL 中建表时,通常默认其存储引擎为InnoDB,这是由。引擎可以在建表时根据ENGIne设定,也可以后期通过alter table 修改。具体写语法请自己学习

一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历。对于大多数@H_755_2@mysqL存储引擎都支持这种索引,然各个引擎实现性能各不相同,各有优劣;甚至有的存储引擎内部实际上使用了T-Tree

访问速度原因:

获取需要的数据,取而代之的是从索引的根结点开始进行搜索。

内容为指针,它们的指针指向的是被索引的数据而不是其它的节点页(不同引擎的“指针”类型不同)。

查询类型:

查询类型的确定源于

                3.3.1、全值匹配:查找条件为索引列的所有列,此处列的顺序可以和索引中的顺序不同。

间的值。

一个和第二个列,第一列为col1=‘xxx’ ,第二列为范围匹配。

查询:查询列为索引中的列,即为查询只需要访问索引即可,无需访问数据行。

@H_755_2@mysqL仅能使用索引的第一列。

查询中有某个列的范围查询,则其右边的所有列都无法使用索引优化查找。

@H_755_2@mysqL的聚簇索引机制介绍:

支持聚簇索引,接下来我们要研究的是InnoDB引擎下的聚簇引擎,但其中讨论的原理对其它任何支持聚簇索引的存储引擎都是适用的。

在同一个结构中保存了B-Tree索引和数据行。当表有聚簇索引时,它的数据行实际上存放在索引的叶子页上。术语“聚簇”表示:数据行和相邻的键值紧凑的存储在一起(然这并非总是成立的)。InnoDB通过主键聚集数据。如果没有定义主键,一个唯一的非空索引代替。如果没有这样的索引,一个主键来作为聚簇索引。一个页面中的记录。包含相邻键值的页面可能相距甚远。

用户ID来聚集数据,这样只需要从磁盘读取少数的数据页就能获取某个用户的全部邮件。如果没有使用聚簇索引,则每封邮件都可能导致一次磁盘I/O。

一个B-Tree中,因此从聚簇索引中获取数据通常比在非聚簇索引中查找快。

查询可以直接使用页节点中的主键值。因为聚簇索引的节点中保存了主键值,所以如果在覆盖索引中查找的列刚刚好有主键列,那么其主键值可以直接在聚簇索引中直接获取。

I/O密集型应用的性能。但是在一中场景中其优势无法体现:如果数据本身比较小且已经都存在内存当中了,那么根据内存本身由DRAM实现可知,可以随机访问内存当中的任意单元的内容,则访问顺序就没那么重要了。

页面来容纳该行,这会导致页1存储数据不饱和,新页2存储数据为原来一半。

@H_755_2@mysqL每个表都有一个聚簇索引,除此之外的表上的非聚簇索引都是二级索引)可能比想象中要大,因为二级索引包含来引用行的主键列。   而主键列的类型和数据库的编码方式决定了其占用字节数目。

支持聚簇索引,所以其存储数据的方式和不支持聚簇索引的引擎方式时很不一样的。

内容:

内容:

一个索引包含(or 说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。

I/O密集型的范围查询会比随机从磁盘读取每一行数据的I/O要少很多。

调用。这可能导致严重的性能问题,尤其那些系统调用占了数据访问中的最大开销的场景。

 5.1.2.4、聚簇索引对InnoDB表特别有用。查询,则可以避免对主键的二次查询。

@H_755_2@mysqL中仅有B-Tree索引可以作为覆盖索引。

查询关联多张表,则只有当order by 子句引用的字段全部为第一张表中的时,才能使用索引做排序。

查询的限制是一样的:需满足索引的最左前缀的要求;否则,无法使用索引排序。

一个三星系统的概念:

一个索引是否适合某个查询,提出了“三星系统”(three-star system):

查询中需要的全部列则获得三星。

查询的列放在索引的后面,以便优化器可以使用尽可能多的索引列。

性能。默认只压缩字符串,但通过参数设置可以对整数做压缩。MyISAM压缩每个索引块的方法是:先完全保存索引块的第一个值,然后将其它值和第一个值比较得到相同前缀和剩余的不同后缀部分,把这部分存储起来即可。例如,索引块第一个值为“perform”,第二个值为“perfoRMANce”,那么第二个值压缩后存储的类似为“7,ance”这样的形式。

添加新索引的时候。

查询锁定更少的行,从而减少锁的数量。

共享锁,但读取主键索引需要排他锁。

查询的索引相关的信息,可以explain一下,显示了MysqL" rel="nofollow" class="replace_word" title="MysqL知识库" style="color:rgb(223,52,52);text-decoration:none;font-family:Arial;font-size:14px;font-weight:bold;">MysqL查询语句。

大佬总结

以上是大佬教程为你收集整理的MySQL索引的学习总结全部内容,希望文章能够帮你解决MySQL索引的学习总结所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: