mysql索引结构及其原理
索引数据结构 : 目前大部分数据库系统及文件系统都采用B Tree或者B+Tree作为索引结构 B树:每个节点存储m/2到M个关键字,非叶子节点储存指向关键字范围的子节点的指针或者某节点详细数据;所有关键字在整棵树中出现,且只出现一次,非叶子节点可以命中。 B+树:在B+树的基础上,为叶子节点增加链表指针,所有关键字都在叶子节点中出现,非叶子节点作为叶子节点的索引;B+树总是到叶子节点才能命中。 B*树:在B+树的基础上,为非叶子节点也增加链表指针,将节点的最低利用率从1/2提高到2/3 MySql(默认使用InnoDB引擎),将记录按照页的方式进行管理,每页大小默认为16k(这个值可以修改),Linux默认页大小为4k 3阶的B+树,包含2层索引,每个索引节点4bytes,最后一层要存数据,假设数据大小也是4bytes,最后一层一个叶子节点是4+4 = 8 (4*1024/4) * (4*1024/4) * (4*1024/8) = 500 000 000 约为5亿个key/value数据 为什么使用 B tree或者B+Tree 红黑树也可用来实现索引,但是文件系统及数据库系统普遍采用B Tree或者B+ Tree,为什么? 一般来说,索引本身也很大,不可能全存内存,往往以索引文件的行驶存在磁盘 1.单节点能储存更多数据,使得磁盘IO次数更少 2.叶子节点形成有序链表