掌桥专利:专业的专利平台
掌桥专利
首页

一种Opengauss中numeric数据基于缩略比较的索引创建方法

文献发布时间:2023-06-19 18:30:43


一种Opengauss中numeric数据基于缩略比较的索引创建方法

技术领域

本发明涉及索引创建技术领域,尤其涉及一种Opengauss中numeric数据基于缩略比较的索引创建方法。

背景技术

索引是数据库最重要的功能之一,索引的本质是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

索引创建是实现索引功能的基础。以最为常用的Btree索引为例,在创建btree类索引过程中,最耗时的部分是对数据库表中的值进行排序的处理,排序的性能对创建索引的速度至关重要。

在实际应用中,当某些数据类型采用字符数组的数据结构实现,而数据的字符数组超长时,会严重影响索引的创建进程。例如,numeric是常用的数据类型,在Opengauss数据库中,会存储超长的numeric类型,所以对numeric数据类型的存储采用了字符数组的数据结构来实现。进而导致numeric在排序算法进行比较时,无法使用常规的数字比较函数,需要使用逐个字符比较大小的算法,导致索引创建的效率十分低下。

因此,如何提高在numeric数据类型上创建索引的效率,成为亟待解决的技术问题。

发明内容

有鉴于此,为了克服现有技术的不足,本发明主要解决的问题是优化numeric数据排序的效率,提高Opengauss中在numeric数据创建索引的效率。

一方面,本发明提供一种Opengauss中numeric数据基于缩略比较的索引创建方法,包括:

步骤S1:判断待创建索引数据的列是否为numeric类型,根据判断结果为目标表中的元组设置用于缩略比较的优化标记;

步骤S2:逐个扫描目标表中的元组,根据元组的优化标记,保存元组索引列的值;

步骤S3:通过缩略比较算法对步骤S2中的元组进行排序;

步骤S4:将步骤S3中经过排序的元组插入到btree索引中。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法的步骤S1中,根据判断结果为目标表中的元组设置用于缩略比较的优化标记,包括:

如果待创建索引数据的列是numeric类型,设置优化标记的值为真;

如果待创建索引数据的列不是numeric类型,设置优化标记的值为假。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法的步骤S2中,根据元组的优化标记,保存元组索引列的值,包括:

如果元组的优化标记的值为真,将所述元组索引列的值由numeric类型转换为int类型的缩略键,保存转换后的缩略键以及所述元组的索引列原始字段的值;

如果元组的优化标记的值为假,保存数据类型为numeric的元组索引列的值。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法中,将所述元组索引列的值由numeric类型转换为int类型的缩略键,包括:当所述元组索引列的值为正数时,按以下方式对元组索引列的值进行转换:

如果numeric数据的最高位权重大于20,采用int类型数据的最大值表示缩略键;

如果numeric数据的最高位权重小于-11,采用0表示缩略键;

如果numeric数据的最高位权重在-11与20之间,获取待转换numeric的前七位有效数字,以整型int表示,记为中间结果A;将numeric数据的最高位权重左移24位,以整型int表示,记为中间结果B;将中间结果A与中间结果B进行按位或运算,以按位或运算获得的整型int表示缩略键。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法中,将所述元组索引列的值由numeric类型转换为int类型的缩略键,包括:当所述元组索引列的值为负数时,将所述元组索引列的值通过乘以-1进行取正得到正值,对所述正值进行转化后,将转换结果通过乘以-1进行取负,采用取负后的值表示缩略键。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法的步骤S3,包括:

比较两个元组的缩略键,如果两个元组的缩略键不相等,根据比较结果对所述两个元组进行排序;

如果两个元组的缩略键相等,比较所述两个元组的索引列原始字段的值,根据比较结果对所述两个元组进行排序。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法的步骤S3,包括:通过缩略比较算法对步骤S2中的元组按从小到大的方式进行排序。

进一步地,本发明Opengauss中numeric数据基于缩略比较的索引创建方法的步骤S3,包括:通过缩略比较算法对步骤S2中的元组按从大到小的方式进行排序。

另一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,执行上述Opengauss中numeric数据基于缩略比较的索引创建方法的步骤。

最后,本发明还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述Opengauss中numeric数据基于缩略比较的索引创建方法的步骤。

本发明Opengauss中numeric数据基于缩略比较的索引创建方法,具有以下有益效果:通过“缩略键”比较方式,将现有技术中字符数组逐个比较的方式,优化为单个int数据的直接比较,提升了比较算法性能,减少了大量的CPU的运算次数,大大减少了numeric数据类型索引创建的耗时,从而减少了现有技术中原有算法的开销,提升索引创建的效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明示例性第一实施例Opengauss中numeric数据基于缩略比较的索引创建方法的流程图。

图2为本发明示例性第一实施例Opengauss中numeric数据基于缩略比较的索引创建方法的执行流程图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。

图1为根据本发明示例性第一实施例的一种Opengauss中numeric数据基于缩略比较的索引创建方法的流程图,图2为根据本发明示例性第一实施例的一种Opengauss中numeric数据基于缩略比较的索引创建方法的执行流程图,如图1和图2所示,本实施例的方法,包括:

步骤S1:判断待创建索引数据的列是否为numeric类型,根据判断结果为目标表中的元组设置用于缩略比较的优化标记;

步骤S2:逐个扫描目标表中的元组,根据元组的优化标记,保存元组索引列的值;

步骤S3:通过缩略比较算法对步骤S2中的元组进行排序;

步骤S4:将步骤S3中经过排序的元组插入到btree索引中。

本发明示例性第二实施例提供一种Opengauss中numeric数据基于缩略比较的索引创建方法,本实施例是图1和图2所示方法的优选实施例,本实施例方法的步骤S1中,根据判断结果为目标表中的元组设置用于缩略比较的优化标记,包括:

如果待创建索引数据的列是numeric类型,设置优化标记的值为真;

如果待创建索引数据的列不是numeric类型,设置优化标记的值为假。

本发明示例性第三实施例提供一种Opengauss中numeric数据基于缩略比较的索引创建方法,本实施例是图1和图2所示方法的优选实施例,本实施例方法的步骤S2中,根据元组的优化标记,保存元组索引列的值,包括:

如果元组的优化标记的值为真,将所述元组索引列的值由numeric类型转换为int类型的缩略键,保存转换后的缩略键以及所述元组的索引列原始字段的值;

如果元组的优化标记的值为假,保存数据类型为numeric的元组索引列的值。

在实际应用中,本实施例方法中,将所述元组索引列的值由numeric类型转换为int类型的缩略键,包括:

当所述元组索引列的值为正数时,按以下方式对元组索引列的值进行转换:

如果numeric数据的最高位权重大于20,采用int类型数据的最大值表示缩略键;

如果numeric数据的最高位权重小于-11,采用0表示缩略键;

如果numeric数据的最高位权重在-11与20之间,获取待转换numeric的前七位有效数字,以整型int表示,记为中间结果A;将numeric数据的最高位权重左移24位,以整型int表示,记为中间结果B;将中间结果A与中间结果B进行按位或运算,以按位或运算获得的整型int表示缩略键。其中,按位或运算是一种双目运算,其功能是参与运算的两数各对应的二进位相或,只要对应的二个二进位有一个为1时,结果位就为1,当参与运算的是负数时,参与两个数均以补码出现。

以整型123456789为例对本实施例方法的转换过程进一步说明,在numeric数据结构体中,具体变量会存储以下值

由于123456789的最高位权重为9,在-11与20之间,故进行以下变换:

记A为前七位有效数字,也即A=1234567,A的类型为int,转换为二进制表示为100101101011010000111;

记B为最高位权重,即B=9,将B左移24位,得到150994944,转换为二进制为1001000000000000000000000000;

将上述两个结果进行按位或运算,得到1001101111000110000101001110,转换十进制为163340622作为其缩略键。

当所述元组索引列的值为负数时,将所述元组索引列的值通过乘以-1进行取正得到正值,对所述正值进行转化后,将转换结果通过乘以-1进行取负,采用取负后的值表示缩略键。

本发明示例性第四实施例提供一种Opengauss中numeric数据基于缩略比较的索引创建方法,本实施例是图1和图2所示方法的优选实施例,本实施例方法的步骤S3,包括:

比较两个元组的缩略键,如果两个元组的缩略键不相等,根据比较结果对所述两个元组进行排序;

如果两个元组的缩略键相等,比较所述两个元组的索引列原始字段的值,根据比较结果对所述两个元组进行排序。

在实际应用中,本实施例方法通过缩略比较算法对步骤S2中的元组按从小到大的方式进行排序。也可以通过缩略比较算法对步骤S2中的元组按从大到小的方式进行排序。

另一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,执行上述Opengauss中numeric数据基于缩略比较的索引创建方法的步骤。

最后,本发明还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述Opengauss中numeric数据基于缩略比较的索引创建方法的步骤。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

相关技术
  • 一种数据同步时数据表索引的创建方法
  • 一种基于协处理器的HBase二级索引创建方法以及系统
  • 一种基于神经网络的索引数据结构及其数据检索方法
  • 一种在OpenGauss数据库分区表上在线创建全局索引的方法
  • 基于BloomFilter的多列索引在列存数据库中的创建及使用方法
技术分类

06120115598607