数据库索引的方法

文档序号:6459369阅读:205来源:国知局
专利名称:数据库索引的方法
技术领域
本发明数据库索引技术领域,涉及一种数据库索引方法,尤其涉及一种利用B+树的数据 库索引方法。
背景技术
B树由R. Bayer和E. McCreight在1972年提出,可以看作是"二叉搜索树"在外存中 多路扩展的一般形式,它被设计用来管理和维护大规模数据的索引,具有随机查询效率高、 更新开销小和自平衡等特点。B+树在B树的基础上,进一步规定所有的"键值"只能出现在 叶子节点中,并用链表的方式把所有叶子节点串连在一起,提高了顺序查询的效率。
研究B+树的算法时,为了简化一般都假设不存在键值重复的情况。现有处理处理重复键 值的方法主要是采用"溢出页",即当某个键值对应的记录数大于1时,分配一个"溢出页" 用来存放所有的重复键值和其对应记录的偏移量。
这个方法尽管简单,但不可避免的浪费了溢出页中空闲的空间,尤其是当键值所占空间 相对于溢出页容量较小时,空间浪费的程度加剧,整个索引文件对磁盘的需求量随之明显增 加。

发明内容
本发明所要解决的技术问题是提供一种利用B+树的数据库索引方法。 为解决上述技术问题,本发明采用如下技术方案 一种数据库索引的方法,其特征在于,该方法包括如下步骤 步骤A、根据索引数据库建立一B+树;
步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中; .步骤C、执行索引操作,包括査询操作、插入操作、删除操作。 作为本发明的一种优选方案,所述步骤B包括 步骤B1、重新定义B+树非叶节点的索引键值;
步骤B2、在每个非叶节点中新增一个索引键值。
作为本发明的一种优选方案,所述步骤B1中,将B+树非叶节点中的第i个索引键值定义 为以该非叶节点的第i+l个子节点为根的子树中,第一次出现的新键值;若新键值不存在,即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为 "空"。
作为本发明的一种优选方案,所述步骤B2中,该新增的索引键值表示以某个非叶节点第 0个子节点为根的子树中,第一次出现的新键值。
作为本发明的一种优选方案,所述査询操作中,在非叶节点中,确定下一步应该遍历的 个子节点时,增加了对可能出现的"空"索引键值的处理。
作为本发明的一种优选方案,所述插入操作中,每次将新键值插入到相应的叶节点后,
从该叶节点向上递归更新父节点的的索引键值,直至根节点。
作为本发明的一种优选方案,所述插入操作包括分裂过程,将一个节点分裂成两个节点 后,在父节点中更新本节点索引键值并且增加对应新节点的索引键值,并可能需要递归向上 更新,直至根节点。
作为本发明的一种优选方案,所述删除操作中,每次在某个叶节点中删除一个键值后, 从该叶节点向上递归更新父节点的的索引键值,直至根节点。作为本发明的一种优选方案,所述删除操作包括合并过程,合并两个节点后,需要在父
节点中更新本节点索引键值并且删除被合并节点的索引键值,并可能需要递归向上更新,直 至根节点。
本发明的有益效果在于本发明的利用B+树的数据库索引方法,由于将重复出现的键值 直接存储在B+树的叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而 数据表中又存在一定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少 索引文件的大小,同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。


图1为本发明数据库索引方法的流程图。 图2为本发明定义的B+树结构图。
图3-1、图3-2分别为实施例中B+树分裂过程前后的结构示意图。 图4为实施例中B+树删除操作的结构示意图。
具体实施方式
下面结合附图详细说明本发明的优选实施例。
请参阅图l,本发明揭示了一种数据库索引的方法,其特征在于,该方法包括如下步骤-步骤A、根据索引数据库建立一B+树;
步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;包括 步骤B1、重新定义B+树非叶节点的索引键值;将B+树非叶节点中的第i个索引键值定义
为以该非叶节点的第i+l个子节点为根的子树中,第一次出现的新键值;若新键值不存在,
即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为 "空"。
步骤B2、在每个非叶节点中新增一个索引键值。该新增的索引键值表示以某个非叶节点 第0个子节点为根的子树中,第一次出现的新键值。
步骤C、执行索引操作,包括査询操作、插入操作、删除操作。
所述査询操作中,在非叶节点中,确定下一步应该遍历的个子节点时,增加了对可能出 现的"空"索引键值的处理。
所述插入操作中,每次将新键值插入到相应的叶节点后,从该叶节点向上递归更新父节 点的的索引键值,直至根节点。所述插入操作包括分裂过程,将一个节点分裂成两个节点后, 在父节点中更新本节点索引键值并且增加对应新节点的索引键值,并可能需要递归向上更新, 直至根节点。
所述删除操作中,每次在某个叶节点中删除一个键值后,从该叶节点向上递归更新父节 点的的索引键值,直至根节点。所述删除操作包括合并过程,合并两个节点后,需要在父节 点中更新本节点索引键值并且删除被合并节点的索引键值,并可能需要递归向上更新,直至 根节点。
请参阅图2,其中揭示本发明中重新定义B+树结构的一棵树的实例。因为6号叶子节点 中的所有键值9已经在之前的节点出现过,故第一次出现的新键值不存在,所以用"#"表示 该索引值为"空"。另外,图中用下划线标注的数字表示每个非叶节点的额外索引键值,例如, 因为第8号叶子节点中第一次出现的新键值为25,而它又是3号节点的第0个儿子节点,所 以3号节点的额外索引键值为25。
本发明中B+树的插入算法总是从根节点开始,通过比较索引键值和待插入键值的大小来 确定下一步应该遍历哪一个子节点,直至找到合适的叶节点来容纳待插入键值。在递归向下 遍历的过程中,如果节点已满,即节点的(索引)键值数等于节点允许的最大值时,提前对其进行分裂操作,这样可以保证当下层节点进行分裂操作需要向上层父节点中添加一个新的 索引键值时,父节点总是未满,即节点的索引键值数小于最大允许的键值数。此外,每当发 生分裂操作和插入新键值后,都可能需要沿着查询路经递归向上更新父节点中的索引键值, 以保证B+树数据结构的完整性。
图3-1、图3-2揭示一个在图2所示的B+树中插入键值29后,引起的第9号叶子节点的 分裂和第3号节点索引值更新的例子。如图所示,待插入键值为29,从根节点递归向下最终 找到合适的第9号叶节点以容纳新键值。此时由于第9号叶节点己满,需要将其分裂成本节 叶节点和第10号新叶节点,然后在第10号叶节点中插入键值29。由于原先第9号节点中第 一次出现的键值30现在由于分裂操作被移动到第10号节点中,所以应该将其父节点,即第3 号节点中相应的索引键值从30更新为"空",用"#"表示;同时,在父节点中还应该添加一 个索引键值以表示新增叶节点中第一次出现的新键值,本例中为新插入键值29。
本发明的B+树删除算法类似插入算法,通过比较索引键值和待删除键值在大小来确定下 一步应该遍历哪一个子节点,直至找到包含待删除键值的叶节点。在递归向下的遍历的过程 中,如果节点的索引键值数已经等于规定的最小值时,提前将其与邻居节点合并(merge)或 是从邻居节点中借出(borrow)索引值。这样可以保证当下层节点进行合并操作需要从上层父 节点中删除一个索引键值时,父节点中的索引键值总是足够多,即节点的索引键值数大于规 定的最小键值数。由于将重复的键值直接存储在B+树的叶节点中,遍历到的叶节点的左侧可 能不是第一个包含待删除键值的节点,所以应该向左査找到第一个包含待删除键值的叶节点, 同时应该对新查询路经上的节点重新进行"合并"或是"借出"的操作。此外,由于我们改 变了B+树中索引值的定义,所以"合并"、"借出"和"删除"操作不只影响到待操作节点与 其父节点两个节点中的索引值,为了保持整个B+树索引结构的完整性,父节点中索引值的变 化可能需要更新查询路经向上每个节点的索引值。
如图4所示,为了删除键值21,从根节点开始递归向下找到一个包含键值21的节点eaf, 此时向左查找到第一个包含键值21的叶节点leftMostLeaf,它们的共同父节点为 commonParent。从图中可以看出,从共同父节点commonParent到leaf节点的路经上已经进行 了 "合并"或是"借出"的操作,而在commonParent节点到leftMostLeaf节点的路经上还没 有,,所以应该在此路经上重新按需要进行"合并"或是"借出"的操作。其中,左边路经上 的节点还未进行过MERGE或BORROW操作;右边路径上的节点已经进行过MERGE或 BORROW操作。综上,本发明的利用B+树的数据库索引方法,由于将重复出现的键值直接存储在B+树的 叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而数据表中又存在一 定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少索引文件的大小, 同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。
以上实施例仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修 改或局部替换,均应涵盖在本发明的权利要求范围当中。
权利要求
1. 一种数据库索引的方法,其特征在于,该方法包括如下步骤步骤A、根据索引数据库建立一B+树;步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;步骤C、执行索引操作,包括查询操作、插入操作、删除操作。
2、 根据权利要求l所述的数据库索引的方法,其特征在于所述步骤B包括步骤B1、重新定义B+树非叶节点的索引键值;步骤B2、在每个非叶节点中新增一个索引键值。
3、 根据权利要求2所述的数据库索引的方法,其特征在于所述步骤B1中,将B+树非叶节点中的第i个索引键值定义为以该非叶节点的第i + l个子节点为根的子树中, 第一次出现的新键值;若新键值不存在,即该子树中包含的所有键值均相同,且已经出现在之前的子树中,则将该索引键值定义为"空"。
4、 根据权利要求2所述的数据库索引的方法,其特征在于所述步骤B2中,该新增的 索引键值表示以某个非叶节点第O个子节点为根的子树中,第一次出现的新键值。
5、 根据权利要求1或2或3或4所述的数据库索引的方法,其特征在于所述査询操作 中,在非叶节点中,确定下一步应该遍历的个子节点时,增加了对可能出现的"空" 索引键值的处理。
6、 根据权利要求1或2或3或4所述的数据库索引的方法,其特征在于所述插入操作 中,每次将新键值插入到相应的叶节点后,从该叶节点向上递归更新父节点的的索引 键值,直至根节点。
7、 根据权利要求1或2或3或4所述的数据库索引的方法,其特征在于所述插入操作 包括分裂过程,将一个节点分裂成两个节点后,在父节点中更新本节点索引键值并且 增加对应新节点的索引键值,并可能需要递归向上更新,直至根节点。
8、 根据权利要求1或2或3或4所述的数据库索引的方法,其特征在于所述删除操作 中,每次在某个叶节点中删除一个键值后,从该叶节点向上递归更新父节点的的索引 键值,直至根节点。
9、 根据权利要求1或2或3或4所述的数据库索引的方法,其特征在于所述删除操作 包括合并过程,合并两个节点后,需要在父节点中更新本节点索引键值并且删除被合 并节点的索引键值,并可能需要递归向上更新,直至根节点。
全文摘要
本发明揭示了一种数据库索引的方法,该方法包括如下步骤步骤A、根据索引数据库建立一B+树;步骤B、定义步骤A中的B+树的数据结构,将重复的键值存储于B+树的叶节点中;步骤C、执行索引操作,包括查询操作、插入操作、删除操作。本发明的利用B+树的数据库索引方法,由于将重复出现的键值直接存储在B+树的叶节点中,避免了使用溢出节点,所以当溢出节点相对于键值较大时,而数据表中又存在一定量的重复键值的情况下,本发明能够有效地避免空间的浪费,从而减少索引文件的大小,同时也拓宽了B+树的适用范围。由此优化了数据库索引方案。
文档编号G06F17/30GK101286160SQ200810038369
公开日2008年10月15日 申请日期2008年5月30日 优先权日2008年5月30日
发明者徐逸文, 钰 方, 曾国荪, 苗夺谦, 蒋昌俊, 闫春钢, 陈闳中 申请人:同济大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1