数据库索引篇

B(B-)Tree

索引与其数据在磁盘上的地址放在一起,所以同一节点上存放的索引数量有限,树的深度不可控

B+Tree(一种有序的索引数据结构)

数据(数据在磁盘上的地址)存放在叶子节点,其他节点只存放索引以及指向的下一索引位置信息,由于索引大小不超过8b,同时用来存储下一个索引位置的内存底层分配大小为6b,故一个节点可以存放1100多个索引,而叶子节点由于需要存放数据在磁盘文件上的地址,所以占用空间较大,约为1kb,故三层B+Tree结构可以存放1100*1100*16约为2000万数据。即只需要进行3次io操作就可以查询近2000万条数据,效率是很高的,相对于b树,它的树高度可控,同时存储的数据更多。同时叶子节点之间会用指针相连接,形成一个双向链表结构,相对于b树,它在进行范围查找时,只需要沿着指针某一方向一直找到边界位置即可,而b树则需要重新从根节点进行查询,性能较差。在进行查找时,会先加载根节点到RAM中,利用中位查找法得出下一个节点得位置,然后进行一次io操作,将下一个节点加载进ram中,继续执行上述操作,最后得出具体的数据位置,由于查找是在内存中进行,所以性能较高。但使用B+tree,索引会存在冗余。并且因为有序性,故指定的索引列最好为整型便于比较大小,进行排序,同时为自增,如此新加入的数据就会直接插入在尾部,对整个索引结构不作任何改变。InnoDB的主键索引叶子节点会存放当前行所有数据,而其他列索引,会存放当前行的主键值。所以推荐使用整型以及自增主键作为主键索引。当查询非主键索引时,会进行回表操作,去查询主键索引得到具体数据

hash索引

类似hashMap,发生hash碰撞后,数据在hash桶中以链表形式存储,具体某一数据查找效率要高于b+树,但进行范围查找时,效率极低,故大部分场景下使用B+树作为底层索引结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值