用于创建索引的方法和系统的制作方法

文档序号:6600028阅读:219来源:国知局
专利名称:用于创建索引的方法和系统的制作方法
技术领域
本发明涉及数据库领域。更确切的,本发明涉及数据库领域中为数据库创建索引的方法和系统。
背景技术
随着计算机技术的发展,数据库的应用越来越广泛,数据库的容量也日益增长。为了对数据库进行快速查询,现有的数据库管理系统通常为数据库建立索引。索引是建立在数据库表中的某些列的上面的。一般来说,在这些列上创建索引1)在经常需要搜索的列上,可以加快搜索的速度;幻在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;5) 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;6)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度,等寸。创建索引可以大大提高数据库系统的性能。通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性,可以大大加快数据的检索速度,还可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。通过使用索引,可以在查询的过程中, 使用优化隐藏器,提高系统的性能。在现有的数据库管理系统中,B+Tree索引是最常见的索引结构,默认建立的索引就是这种类型的索引。B+Tree索引是一种平衡树,是基于二叉树的,由根节点、中间节点和叶节点组成。根节点、中间节点和叶节点都位于索引页中,统称为索引节点。其中,不存在父亲节点的是根节点,不存在子节点的是叶节点,位于根节点和叶节点之间的是中间节点。 其中,根节点存储指向中间节点的指针;中间节点位于根节点和叶级节点之间,存储指向下一级中间节点或叶节点的指针;而叶节点则存储指向数据页(即数据的物理存储位置)的指针。一个数据库查询往往是多重的,假设有两个表Tl和T2,其中Tl有两个索引在第一列(coll)上的索引Tl_il以及在第二列(col2)上的索引Tl_i2,以如下查询为例Select^from Tl,T2where Tl. coll = T2. coll and Tl. col2> = 60 and Tl. col2 < 90数据库管理系统首先利用条件Tl. col2 >=60 and Tl. col2 < 90扫描索引Tl_ i2获得中间结果并将中间结果复制到内存或其他临时的存储位置中,这时,中间结果对应于表Tl中由第二列索引的第60行到第90行的内容。然后,利用该中间结果的第一列与表 T2的第一列进行匹配得到查询结果。这时,由于表Tl的第一列(coll)上的索引Tl_il的叶节点中存储的是指向原表Tl中数据的物理存储位置的指针,而中间结果被复制到内存或其他临时的存储位置,因此,索引Tl_il中的指针对中间结果来说将变得无效。也就是
3说,中间结果不能利用索引Tl_il,因此,对中间结果只能进行全表遍历。

发明内容
由于对于中间结果,已经存在的索引中的指针变得无效,索引带来的好处将不能得到利用。而且,在大型企业应用中,数据库表的容量往往很大,对数据库表的全表遍历将大量耗费计算资源。本公开的说明性实施例认识到现有技术中的缺点,提供了一种用于为数据库创建索引的方法,包括选取数据库表的至少一列作为创建索引的依据;根据该至少一列产生至少一个树结构的索引,其中该至少一个索引的叶节点中存储的指针为空值。根据本公开的另一方面,用于为数据库创建索引的方法还包括如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页。根据本公开的另一方面,用于为数据库创建索引的方法还包括响应于利用中间结果进行运算的完成,将叶节点中存储的指针重置为空值。根据本公开的一个方面,提供了一种用于为数据库创建索引的系统,包括选取部件,被配置用于选取数据库表的至少一列作为创建索引的依据;产生部件,被配置用于根据该至少一列产生至少一个树结构的索引,其中该至少一个的叶节点中存储的指针为空。根据本公开的另一方面,用于为数据库创建索引的系统还包括指针赋值部件,被配置用于如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页。根据本公开的另一方面,用于为数据库创建索引的系统还包括指针重置部件,被配置为用于响应于利用中间结果进行运算的完成,将叶节点中存储的指针重置为空值。根据本公开的方法和系统,产生的索引可以重复使用,而且,由于能够利用索引对中间结果进行运算,也大大提高了数据库操作的效率。


本公开可以通过参考下文中结合附图所给出的描述而得到更好的理解,其中在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并且形成本说明书的一部分,而且用来进一步举例说明本公开的优选实施例和解释本公开的原理和优点。在附图中图1显示了根据本公开一个实施例的用于为数据库创建索引的方法100 ;图2示例性地显示了索引的根节点、中间节点和叶节点生成的过程;图3显示了根据本公开一个实施例的用于为数据库创建索引的系统300。
具体实施例方式在下文中将结合附图对本公开的示范性实施例进行描述。为了清楚和简明起见, 在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多特定于该实际实施方式的决定,以便实现开发人员的具体目标, 例如,符合与系统及业务相关的那些限制条件,并且这些限制条件可能会随着实施方式的不同而有所改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于本公开公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本公开,在附图中仅仅示出了与根据本公开的方案密切相关的装置结构和/或处理步骤,而省略了与本公开关系不大的其他细节。如背景技术部分描述的,现有的数据库管理系统中,B+Tree索引是最常见的索引结构。下面,将以B+Tree作为示例对发明进行描述,但所属领域技术人员知道,对于其他类型的索引,只要具有类似的结构都能应用本发明,利用B+Tree作为示例只是出于说明的目的,而不能作为对本发明的限制。下面参考图1,其中显示了根据本公开一个实施例的用于为数据库创建索引的方法 100。如图1所示,根据本公开一个实施例的用于为数据库创建索引的方法100从步骤 102开始。接下来,方法100进入步骤104,其中,选取数据库表的一列或多列作为创建索引的依据。这些列包括1)经常需要搜索的列上,可以加快搜索的速度;2)作为主键的列,强制该列的唯一性和组织表中数据的排列结构;3)经常用在连接的列,这些列主要是一些外键,可以加快连接的速度;4)经常需要根据范围进行搜索的列,因为索引已经排序,其指定的范围是连续的;5)经常需要排序的列,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;6)经常使用在WHERE子句中的列,可以加快条件的判断速度,等等。 然后,方法100进入步骤106,其中根据该一列或多列产生索引的根节点、中间节点以及叶节点,其中叶节点中存储的指针为空值。下面结合图h-2d,通过一个简单的例子介绍生成索引的根节点、中间节点以及叶节点的过程,这里需要说明,这里只是一种示例性的介绍,除了这里介绍的生成索引的根节点、中间节点以及叶节点的方式,还可以采用现有技术中的任何其他方式。同时,如何生成索引的根节点、中间节点以及叶节点不是本发明对现有技术做出的改进。假设所选取的列中有如下值40,59,60,66,70,72,73,75,76,78,80,83,86,90,···首先插入第一个值40生成根节点,然后产生根节点的子节点,在该子节点中,值 40作为其中的一个条目,如图加所示。然后继续插入后面一个值59。每个子节点中所能存储的条目的数量有限,这里假设该数量为M(M为一个预先定义的值)。这时,首先判断值59插入到该子节点中是否会导致该子节点存储的条目数量大于M,本例中值59的插入不会导致该子节点存储的条目数量大于M,因此直接插入到该子节点中,如图2b所示。然后,继续插入后面一个值60。这时,仍需首先判断值60插入到该子节点中是否会导致该子节点存储的条目数量大于M,本例中值60的插入会导致该子节点存储的条目数量大于M,这时,需要把该子节点分裂成两个含有M/2个条目的节点。具体的做法是,创建一个新的节点,将原来节点后一半的值拷贝到新创建的节点。将新创建的节点的地址和含有的最小值写入其父亲节点。如图2c所示。之后,继续插入后面的值。如果在插入的过程中,把子节点分裂之后将新创建的节点所含有的最小值写入其父亲节点后,其父亲节点条目的数量也大于M,则按照相似的方法分裂该父亲节点,直到没有节点需要分裂。如果根节点需要分裂,则需要加入一个节点作为该根节点的新的根节点(该根节点将作为新的根节点的子节点)。在将所有的值插入之后索引的结构如图2d所示。以上示例性的介绍了生成索引的根节点、中间节点以及叶节点的过程。再次说明, 上面的介绍仅仅是示例性的,可以采用任何其他的方式来生成索引的根节点、中间节点以及叶节点。与现有技术不同的,根据本公开的一个实施例,生成的索引的叶节点中存储的指针为空值(NULL)。至此,根据本公开一个实施例的方法用于为数据库创建索引的方法100结束。图1中还显示了可选步骤108。在步骤108,如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页。数据库管理系统在进行数据库查询时会将获得中间结果复制到内存或其他临时的存储位置中。这时,如果有中间结果的产生,根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页,即中间结果的物理存储位置, 具体可能是存储中间结果的内存,或者是其他临时的存储位置。具体地,从作为创建索引的依据的至少一列中确定需要利用中间结果进行下一步运算所涉及的列,并根据中间结果向所确定的列对应的索引的叶节点中存储的指针赋值。仍以前面提到的查询为例,其中表Tl有两个索引在第一列(coll)上的索引Tl_ il以及在第二列(col2)上的索引Tl_i2 Select^from Tl, T2 where Tl. coll = Τ2· coll and Tl. col2 > = 60 and Tl. col2 < 90根据本发明的一个实施例,数据库管理系统首先会为表Tl创建两个索引对应于第一列(coll)的索引Tl_il’和对应于第二列(col2)的索引Tl_i2’。在执行上述查询时, 数据库管理系统可以首先根据条件Tl. col2 >=60 and Tl. col2 < 90,对第二列(col2) 上的索引Tl_i2进行扫描,以获得中间结果并将中间结果复制到内存或其他临时的存储位置中。这时,中间结果对应于表Tl中由第二列索引的第60行到第90行的内容。根据本发明的一个实施例,首先从作为创建索引的依据的至少一列中确定需要利用中间结果进行下一步运算所涉及的列。在该查询中,作为创建索引的依据的列是第一列(coll)和第二列 (col2);数据库管理系统需要利用该中间结果的第一列与表T2的第一列进行匹配以得到查询结果。也就是说,需要利用中间结果进行下一步运算所涉及的列是第一列。然后,根据中间结果向所确定的列对应的索引的叶节点中存储的指针赋值。对该查询来说,就是向第一列(coll)对应的索引Tl_il’的叶节点中存储的指针赋值。这时,被赋值的叶节点中存储的指针指向存储中间结果的数据页,即中间结果(表Tl中由第二列索引的第60行到第 90行的内容)在内存或其他临时的存储位置中的物理存储位置。经过上述赋值,根据前述方法创建的索引的叶节点中存储的指针指向了存储中间结果的数据页,因此,可以利用经过赋值的索引对中间结果进行后续操作。现有技术中对于中间结果,已经存在的索引会变得无效。与之相比,根据本公开的方法,创建的索引的叶节点中存储的指针经过赋值,指向了存储中间结果的数据页。因此, 中间结果可以用于进行后续的运算,从而大大提高了数据查询的效率。
图1中还显示了可选步骤110。在步骤110,响应于利用中间结果进行运算的完成,将叶节点中存储的指针重置为空值。这些运算包括合并(join)、过滤(filter)、排序 (order by)或分组(group by)等操作。当使用根据本公开的方法创建的索引利用中间结果进行上述运算完成之后,将叶节点中存储的指针重置为空值。之后,如果再次生成中间结果,可以再次根据中间结果向已经重置指针的叶节点中存储的指针再次赋值,即该索引可以被重复使用。现在参考图3,其中显示了根据本公开一个实施例的用于为数据库创建索引的系统 300。如图3所示,用于为数据库创建索引的系统300包括选取部件302,被配置用于选取数据库表的一列或多列作为创建索引的依据;产生部件304,被配置用于根据该一列或多列产生索引的根节点、中间节点以及叶节点,其中叶节点中存储的指针为空。图3还显示了可选部件指针赋值部件306,,被配置用于如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页, 其中优选地,仅在中间结果对应的叶节点中插入指针;以及指针重置部件308,,被配置为用于响应于利用中间结果进行运算的完成,将叶级节点中存储的指针重置为空值;其中运算包括合并、过滤、排序或分组操作。以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和 /或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。虽然已经详细说明了本公开及其优点,但是应当理解在不脱离由所附的权利要求所限定的本公开的精神和范围的情况下可以进行各种改变、替代和变换。而且,本申请的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素, 或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,
由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者装
置中还存在另外的相同要素。
权利要求
1.一种用于为数据库创建索引的方法,包括 选取数据库表的至少一列作为创建索引的依据;根据该至少一列产生至少一个树结构的索引,其中该至少一个索引的叶节点中存储的指针为空值。
2.根据权利要求1的方法,还包括如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页。
3.根据权利要求2的方法,其中根据中间结果向叶节点中存储的指针赋值包括 从作为创建索引的依据的至少一列中确定需要利用中间结果进行下一步运算所涉及的列;以及根据中间结果向所确定的列对应的索引的叶节点中存储的指针赋值。
4.根据权利要求2的方法,还包括响应于利用中间结果进行运算的完成,将叶节点中存储的指针重置为空值。
5.根据权利要求4的方法,其中 运算包括合并、过滤、排序或分组操作。
6.一种用于为数据库创建索引的系统,包括选取部件,被配置用于选取数据库表的至少一列作为创建索引的依据; 产生部件,被配置用于根据该至少一列产生至少一个树结构的索引,其中该至少一个的叶节点中存储的指针为空。
7.根据权利要求6的系统,还包括指针赋值部件,被配置用于如果有中间结果生成,则根据中间结果向叶节点中存储的指针赋值,其中被赋值的叶节点中存储的指针指向存储中间结果的数据页。
8.根据权利要求7的系统,其中产生部件用于从作为创建索引的依据的至少一列中确定需要利用中间结果进行下一步运算所涉及的列;以及根据中间结果向所确定的列对应的索引的叶节点中存储的指针赋值。
9.根据权利要求7的系统,还包括指针重置部件,被配置为用于响应于利用中间结果进行运算的完成,将叶节点中存储的指针重置为空值。
10.根据权利要求9的系统,其中 运算包括合并、过滤、排序或分组操作。
全文摘要
本公开公开了一种用于为数据库创建索引的方法和系统,其中方法包括选取数据库表的至少一列作为创建索引的依据;根据该至少一列产生至少一个树结构的索引,其中该至少一个索引的叶节点中存储的指针为空值。创建的索引可以重复使用,而且能够使中间结果得到有效利用,进而能够提高数据库操作的效率。
文档编号G06F17/30GK102207935SQ20101013697
公开日2011年10月5日 申请日期2010年3月30日 优先权日2010年3月30日
发明者张广舟, 李海峰, 陈奇 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1