前言

1、 索引原理探究

1.1 B树与B+树

1.2 聚簇索引与非聚簇索引

1.3 索引原理图示

1.3.1 聚簇索引

1.3.2 非聚簇索引

1.3.3 联合索引

2 、索引的正确使用姿势

2.1 索引的类型区分

2.2 索引的查看

2.3 索引的创建

2.4 索引失效场景

总结

前言

相信每个IT界大佬,简历上少不了Mysql这个关键字,但如果被问起来,你能说出多少干货呢?先看下面几个问题测试一下吧:

索引是怎么提高查询效率的?可以为了提高查询效率增加索引么?

mysql索引系统采用的数据结构是什么?

为什么要使用B+树?

聚集索引相对于非聚集索引的区别?

什么是回表?

什么是索引覆盖?

什么是最左匹配原则?

索引失效场景有哪些,如何避免?

这些问题说不明白?不要慌!请带着问题向下看。

        

1、 索引原理探究

什么是数据库索引?先来个官方一些的定义吧。

在关系数据库中,索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。❞

这段话有点绕,其实把索引理解为图书目录,就非常好理解了。

如果我们想在图书中查找特定内容,在没有目录的情况下只能逐页翻找。与此类似,当执行下面这样一条SQL语句时,假如没有索引,数据库如何查找到相对应的记录呢?

SELECT * FROM student WHERE name='叶良辰'

搜索引擎只能扫描整个表的每一行,并依次对比判断name的值是否等于“叶良辰”。我们知道,单纯的内存运算是很快的,但从磁盘中取数据到内存中是相对慢的,当表中有大量数据时,内存与磁盘交互次数大大增加,这就导致了查询效率低下。

1.1 B树与B+树

相对于cpu和内存操作,磁盘IO开销很大,非常容易成为系统的性能瓶颈,因此计算机操作系统做了一些优化:

当一次IO时,将相邻的数据也都读取到内存缓冲区内,而不是仅仅读取当前磁盘地址的数据。因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。❞

为什么索引能提升数据库查询效率呢?根本原因就在于索引减少了查询过程中的IO次数。那么它是如何做到的呢?使用B+树。下面先简单了解一下B树和B+树。

B树,即平衡多路查找树(B-Tree),是为磁盘等外存储设备设计的一种平衡查找树。

B树简略示意图:

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。