数据库索引

索引的本质:索引是帮助MySQL高效获取数据的排好序的数据结构

索引存储在文件里

索引结构通常有:二叉树、红黑树、HASH、BTREE

以下是在数据量在百万的前提下

二叉树的极端状况:1,2,3,4,5,6,7 ·····像这样有顺序的会查找非常慢。
红黑树的极端状况:(JDK1.8之后hashMap的底层的链表使用了红黑树)但是跟二叉树的极端情况差不多,只不过层数会少些,因为红黑树可以自动平衡。
HASH:不可以区间查询。

索引底层数据结构与算法

B-Tree(多插平衡树):在红黑树的基础上(也满足二叉树原则),增加叶子节点存储索引的个数。它的宽度是有限的,每一次查询就会跟磁盘做一次IO操作,把数据暴露给内存,内存的查询还是很快的(可以忽略)。
B+Tree:Mysql底层用的数据结构是B+Tree(B-Tree的变种)
B+Tree在B-Tree上做了升级,非叶子节点只存储了索引,在叶子节点上添加了索引冗余,并实现聚集索引。非叶子节点默认可以存储16k数据,一个索引(8B)+索引的指针(6B)=14B,也就是说一个非叶子节点可以存储1170个索引+索引的指针。层级为三级的的话,可以存储两千多万条数据,1170 * 1170 * 16(每条的索引数据假设1K)。

你可能感兴趣的:(个人整理,mysql)