数据库索引,在数据库管理系统中是一个排序形式的数据结构,以协助快速查询和更新数据库表中数据。索引的实现通常使用B树及其变种B+树。

那么为什么要用B+树来实现索引而不使用二叉搜索树或者平衡树或者红黑树呢?要知道原因首先需要了解B树的性质:

一个 m 阶的B树满足以下条件:

  1. 每个结点至多拥有m棵子树;
  2. 根结点如果是非空节点则至少拥有两颗子树;
  3. 除了根结点以外,其余每个分支结点至少拥有 m/2 棵子树;
  4. 所有的叶结点都在同一层上;
  5. 有 k 棵子树的分支结点则存在 k-1 个关键码,关键码按照递增次序进行排列;

B+树在B树的基础上做了改进:

1. B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。

2. B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

B+树的优点:

1. 非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。

2. 叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点不停的往返移动。

一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。一般而言B+树的每个节点都需要操作系统中的一页来进行存储,那么我们在查询使用到索引的时候最多进行的IO次数为访问节点的个数,而在一课搜索树上进行搜索时最多访问的节点个数为树的高度,到这里我们就可以明白索引为什么使用B+树来实现了,B+树中的每个节点可以保存更多的记录,因此树的高度很低,从而查询效率很高。

为表设置索引也是要付出相应的代价:第一,数据库的存储空间增大了;第二,在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

创建索引可以大大提高系统的性能。

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

增加索引也有许多不利的方面。

创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

数据库索引的实现原理以及优缺点相关推荐

  1. 数据库索引的工作原理及其种类

    数据库索引的工作原理及其种类 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算 ...

  2. 什么是m叉树_不懂数据库索引的底层原理?那是因为你心里没点b树

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:苏苏喂 cnblogs.com/sujing/p/11110292.html 题外话 ...

  3. oracle树子类遍历父类_不懂数据库索引的底层原理?那是因为你心里没点b树

    前几天下班回到家后正在处理一个白天没解决的bug,厕所突然传来对象的声音: 对象:xx,你有<时间简史>吗? 我:我去!妹子,你这啥癖好啊,我有时间也不会去捡屎啊! 对象:...人家说的是 ...

  4. 不懂数据库索引的底层原理?那是因为你心里没点b树

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:苏苏喂 cnblogs.com/sujing/p/11110292.html 题外话 ...

  5. 数据库索引的实现原理及查询优化

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 使用索引的目的在于提高查询效率,这篇文章梳理一下索引的实现原理和应用. 不同的存储引擎索引实现的数据结构不同 ...

  6. 数据库索引实现底层原理2

    强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1 说白了,索引问题就是一个查找问题... 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快 ...

  7. 数据库索引的实现原理

    强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1 说白了,索引问题就是一个查找问题... 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快 ...

  8. 数据库索引的实现原理?

    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 索引优点: 创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可 ...

  9. 索引的工作原理及其优缺点

    2019独角兽企业重金招聘Python工程师标准>>> 数据库索引,在数据库管理系统中是一个排序形式的数据结构,以协助快速查询和更新数据库表中数据.索引的实现通常使用B树及其变种B+ ...

最新文章

  1. 背景建模与前景检测3(Background Generation And Foreground Detection Phase 3)
  2. 比较list集合相等的方法
  3. MaxCompute Console 实用小命令
  4. BZOJ 3697: 采药人的路径 [点分治] [我想上化学课]
  5. 院士新作赠送——调查问卷活动感谢信
  6. day32 管道, 数据共享, 进程池, 回调函数
  7. chrome ninja 文件_ninja和gn
  8. htt:// ************不在以下 request 合法域名列表中,请参考文档:******************************
  9. CC3200在sl_Start函数处不断重启复位的原因解析
  10. 大数据的关键不是“大”,而是你真的需要它吗
  11. 面向对象和面向过程思想 oc
  12. 对于计算机专业英语的问题,计算机专业英语的问题
  13. js面向对象编程(二)构造函数的继承(转载)
  14. 放出几个E-book,经典啊,Ruby的
  15. kindeditor上传图片php,使用 KindEditor 编辑器PHP语言本地上传图片提示错误
  16. HM67主板开启ACHI
  17. 从黑马学完IT,能进大厂吗?会不会遭歧视?答案来了…
  18. 计算机网络中数据传输速率的单位是什么,计算机网络中传输介质传输速率的单位是用什么表示...
  19. 中国矿业大学计算机学院研究生奖学金,中国矿业大学计算机学院研究生学业奖学金评定细则2014版...
  20. 在线负数分数计算机,负分数

热门文章

  1. 高等数学同济六版中函数运算一节例题的分析
  2. Django数据库数据增删改查操作
  3. 苹果6可以分屏吗_可以找苹果企业签名中间商做苹果企业签名吗?
  4. 百度关键词排名浮动怎么办?
  5. ArcGIS教程:Nibble (Spatial Analyst)
  6. jsp mysql完整注册登陆_JSP+MySQL最简单的登录和注册的实现 --Java Web温习
  7. OAuth 2.0实现分布式认证授权-jwt的认证服务器和资源服务器配置(5)
  8. 玩转三星Galaxy S21 5G,高阶摄影装备留住人间最美四月天
  9. 中国鱼子酱第一股清江鲟龙渔业
  10. Android技术分享| 【自习室】自定义View代替通知动画(完)