深入解析mysql中的索引(原理详解)

上周,一位客户问我有关 MySQL 索引的问题,我向他解释了这一点。
首先,MySQL索引就像图书馆中的目录,可以帮助数据库快速找到所需的数据。

让我举个例子。
例如,如果您要在一本厚书中查找特定信息,而没有目录,则可能需要浏览整本书。
但使用目录,您可以直接跳到这部分,从而节省时间。
MySQL索引也是如此,它可以帮助数据库快速定位数据。

给大家介绍一下B+树的数据结构。
它用于索引是因为它有很多优点。
例如,叶子节点只存储索引键,不存储实际数据。
这样每个节点就可以存储更多的键值,降低树的高度。
叶子节点存储完整的数据或主键,通过指针连接,支持范围查询,比B树更高效。

然后我解释了索引的类型。
聚集索引按照主键排序,就像InnoDB存储引擎一样。
二级索引是非主键列的索引。
例如,可以在查询特定字段时使用它。
共享索引是结合多个字段的索引,可以优化某些查询。

但是,索引有时会失败。
例如,如果使用共享索引,但查询词从左到右不匹配,或者范围查询后面的列没有建立索引,这将导致索引失败。

最后我给嘉宾提出了一些建议。
例如,最好使用自增整数主键来控制索引列数,定期分析索引使用情况,及时删除无用索引。

无论如何,这取决于你。
这是我对MySQL索引的理解。

学习小林coding 3.3 为什么MySQL采用B+树作为索引?

哦,是的,B+ 树,它们是怎么变得如此受欢迎的?
MySQL 使用 B+ 树主要是为了节省精力和磁盘空间。

看吧,硬盘的读写速度非常慢,比内存差很多。
因此,索引结构必须想办法让硬盘读取次数更少。

B+树是多路平衡树,其中内部节点可以有多个子节点。
节点越多,树的高度就越低,对吗?
树越短,从硬盘读取数据的次数就越少。
这是主要的事情。

接下来,将索引放在B+树上,非叶子节点而不是数据上。

然后可以在节点上放置更多索引,使树更短。
叶子节点存储数据并与指针组合形成有序链表。

要检查点,必须先检查叶子,然后按照链表进行操作。
这在检查范围时特别有用。

想一想。
如果你有从A到C的范围查询,你可以通过链表快速到达那里。

B 树不起作用。
叶节点也存储数据。
当遇到高大的树木时,需要费很大的力气才能一步一步地爬上台阶查看面积,然后再下来。

B+树在插入和删除方面也非常容易。
只需向叶节点添加节点或拆分节点即可。

调整非叶子节点的指针,不要移动太多。
B树很麻烦。
每次删除或插入时,都必须修改树。
重新平衡是一个令人头疼的问题。

相比AVL和红黑树,它更加平衡,但是如果添加太多,树会变高。

更不用说二叉搜索树了。
极端情况下,直接变成链表。
这会导致顺序搜索,这是不幸的。

换句话来说,B+树更短,需要更少的读取,具有更快的搜索范围,更容易添加和删除,并且更容易使用。

MySQL看到了,觉得是个好东西,所以就用了。

就是这样。