mysql oracle结构_说下oracle、mysql、非关系型数据库中的索引结构?

谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~

Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问。若没有索引,你必须顺序扫描数据来查找值。

一个值的有序列表划分成宽块范围(叶子块),查询时间减少为 log(n)。这是 Oracle 数据库索引的基本原则。

B-tree 索引的上半部分块(分支块)包含索引数据,并指向低一级的索引块。最低级别的索引块(叶子块)包含每个已索引的数据值和用于定位真实行的相应 rowid。叶子块是双向链接的(双向链表)。包含字符数据的列中索引是基于数据库字符集的字符二进制值。B-tree 结构有如下优势:树的所有叶子块都在相同深度,这样,在索引中从任何地方检索任何记录都大约花费相同的时间。

B-tree 自动保持平衡。

All blocks of the B-tree are three-quarters full on the average.

B-tree 对大范围查询提供优秀的检索性能,包括精确匹配和访问查询。

插入、更新和删除操作有效,维护键的顺序,以便快速检索。

B-tree 性能对小表和大表都很好,不会随着表的增长而降低。

Mysql索引的数据结构:B+Tree一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。这样的话,索引查找过程中就要产生磁盘I/O的消耗,所以评价一个索引的优劣的重要指标就是I/O的操作次数。

数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。在实现B- Tree为了达到这个目的,实际中还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

B-Tree中一次检索最多需要h-1次I/O(根节点常驻内存),渐进复杂度为O(h)=O(logmN)。一般实际应用中,m是非常大的数字,通常超过100,因此h非常小(通常不超过3)。Mysql索引的数据结构之所以选择B+树而不是B树,是因为它内节点不存储data,这样一个节点就可以存储更多的key。

此外,在非关系型数据库中,例如Mongo的索引结构也是基于B-tree。具体原理树懒君在这里不多做介绍啦~需要详细有关NoSQL的索引内容,树懒君也找了几篇不错的博客,请移步:MongoDB 索引

需要学习 Oracle、MySQL 中建立、删除索引的教程也可以去本站上面学习哦~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值