CN115391346A - 数据库聚合索引的生成方法、存储介质与计算机设备 - Google Patents
数据库聚合索引的生成方法、存储介质与计算机设备 Download PDFInfo
- Publication number
- CN115391346A CN115391346A CN202211034740.8A CN202211034740A CN115391346A CN 115391346 A CN115391346 A CN 115391346A CN 202211034740 A CN202211034740 A CN 202211034740A CN 115391346 A CN115391346 A CN 115391346A
- Authority
- CN
- China
- Prior art keywords
- index
- statistical
- file
- data
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24556—Aggregation; Duplicate elimination
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
Abstract
本发明提供了一种数据库聚合索引的生成方法、存储介质与计算机设备。其中上述方法包括:获取用于创建聚合索引的语句,并根据语句确定出统计公式和被索引关系;创建索引文件以及统计文件;根据统计公式对被索引关系的被统计项进行统计,并将统计得到的聚合数据存储于统计文件中;在索引文件中记录索引键值、被统计项在被索引关系中的位置、以及聚合数据在统计文件中位置三者的对应关系。本发明的方案,统计文件用于保存聚合数据,索引文件有序性提高了统计查询的处理效率;另一方面统计文件的聚合数据随着数据的变化而相应更新,保证了数据的实时性,便于后续统计查询时方便快速高效地提供数据。
Description
技术领域
本发明涉及数据库技术,特别是涉及一种数据库聚合索引的生成方法、存储介质与计算机设备。
背景技术
分析数据库是面向分析应用的数据库,与传统的数据库不同,它可以对数据进行在线统计、数据在线分析、随即查询等发掘信息数据价值的工作,是数据库产品一个重要的分支。
分析数据库应用时需要处理大量的统计查询语句。这些语句中使用大量的聚合操作,用于生成统计信息,如分组,去重,求和,计数等。因此这些语句的处理比较耗时而且需要占用大量的硬件资源。
为了提高这些统计查询的处理效率,现有数据库技术中提出了的一些解决方案,例如物化视图,列存,利用抽样的统计信息计算近似值等,但这些技术都存在一定程度的局限性。例如物化视图不能实时的反应数据的更新,需要通过刷新来反映数据变化,频繁的刷新也同样消耗大量资源。列存为了得到一个列统计,需要导入列的所有数据,效率较差。而抽样统计只能得到近似值,不够精确。
发明内容
本发明的一个目的是要在数据库中提供可以快速得到统计查询结果的技术手段。
本发明一个进一步的目的是聚合索引能够灵活定义。
特别地,本发明提供了一种数据库聚合索引的生成方法,其包括:
获取用于创建聚合索引的语句,并根据语句确定出统计公式和被索引关系;
创建索引文件以及统计文件;
根据统计公式对被索引关系的被统计项进行统计,并将统计得到的聚合数据存储于统计文件中;
在索引文件中记录索引键值、被统计项在被索引关系中的位置、以及聚合数据在统计文件中位置三者的对应关系。
可选地,在创建索引文件以及统计文件之前还包括:获取聚合索引的去重设置;并且将统计得到的聚合数据存储于统计文件中的步骤还包括:根据去重设置确定对被索引关系中重复的被统计项单独保存对应的统计值或仅保存一个统计值。
可选地,被索引关系为单表或者通过子查询得到的关联多个表的查询结果。
可选地,在根据语句确定出统计公式和被索引关系的步骤之后还包括:在数据库的系统表中记录统计公式以及索引文件与被索引关系的对应关系。
可选地,在数据库的系统表中记录统计公式的步骤包括:
对统计公式进行编译,以得到与统计公式对应的可执行代码;
保存与统计公式对应的可执行代码。
可选地,在数据库的系统表中记录统计公式的步骤之前还包括:
判断统计公式是否定义有对应的转换规则;
若是,对按照对应的转换规则对统计进行转换;并且
在数据库的系统表中记录统计公式的步骤包括:在数据库的系统表中记录转换后的统计公式。
可选地,在索引文件中记录索引键值、被统计项在被索引关系中的位置、以及聚合数据在统计文件中位置三者的对应关系的步骤之后还包括:获取被索引关系的操作,并判断操作是否触发被索引关系的修改;若是,根据被索引关系的修改对索引文件以及统计文件进行修改。
可选地,在索引文件中记录索引键值、索引键值对应数据在被索引关系中的位置、以及聚合数据在统计文件中位置三者的对应关系的步骤之后还包括:获取被索引关系的统计查询,并判断统计查询是否针对聚合数据;若是,通过索引文件查询出聚合数据,并响应统计查询。
根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种数据库聚合索引的生成方法。
根据本发明的又一个方面,还提供了一种计算机设备,其包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种数据库聚合索引的生成方法。
本发明的数据库聚合索引的生成方法,在获取到数据库索引的创建语句,创建索引文件以及统计文件,统计文件用于保存索引文件通过统计计算得到的聚合数据。索引文件有序性提高了统计查询的处理效率;另一方面统计文件的聚合数据随着数据的变化而相应更新,保证了数据的实时性。索引文件只保存对应的聚合在文件中的位置,统计数据保存在另外的统计文件中,进一步提高了可靠性。
进一步地,本发明的数据库聚合索引的生成方法,生成的聚合索引具有例如BTree数据结构的索引数据表,每一索引键值(或称索引码值)匹配保存对应数据行的位置以及相应的统计值。聚合索引的统计公式保存于数据库的系统表内,统计种类灵活,可以根据需要灵活配置。此外聚合索引的索引键值可以根据需要选择是否去重,在后续数据操作时,聚合索引可以方便地进行更新。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
图1是根据本发明一个实施例的数据库聚合索引的生成方法的示意图;
图2是根据本发明一个实施例的数据库聚合索引的生成方法实现的聚合索引的数据结构示意图;
图3是根据本发明一个实施例的数据库聚合索引的生成方法实现的聚合索引的一节点的数据示意图;
图4是根据本发明一个实施例的数据库索引的更新方法的流程示意图;
图5是根据本发明一个实施例的数据库索引的使用方法的流程示意图;
图6是根据本发明一个实施例的机器可读存储介质的示意图;以及
图7是根据本发明一个实施例的计算机设备的示意图。
具体实施方式
图1是根据本发明一个实施例的数据库聚合索引的生成方法的示意图,该数据库聚合索引的生成方法用于生成新型的聚合索引,其包括以下步骤:
步骤S102,获取用于创建聚合索引的语句,并根据语句确定出统计公式和被索引关系。
被索引关系可以是数据库的单表,也可以是通过子查询得到的关联多个表的查询结果(或子查询)。也就是说聚合索引可以创建在数据库的单表之上,也可以创建一个关联多个表的子查询之上。这也是与现有索引的重要区别。
数据库获取到的索引创建语句后,可以判断创建索引的类型是否为聚合索引;若是,则执行创建聚合索引的步骤。
步骤S104,创建索引文件以及统计文件。在该步骤之前还可以首先获取聚合索引的去重设置;然后根据去重设置确定对被索引关系中重复的被统计项单独保存对应的统计值或仅保存一个统计值。也就是说聚合索引可以通过设置选择是否为去重后的值,即在聚合索引中,可以是每个数据行有一个索引节点,也可以所有索引键值相同的数据行公用一个索引节点。
索引文件的索引结构可以使用采用BTree数据结构等有序索引结构。数据库系统表可以记录统计公式以及索引数据表与被索引关系的对应关系。
在数据库的系统表中记录统计公式的步骤之前还可以判断统计公式是否定义有对应的转换规则;若是,对按照对应的转换规则对统计进行转换;并且在数据库的系统表中记录统计公式的步骤包括:在数据库的系统表中记录转换后的统计公式。
不同的统计公式的转换要求不同。有些统计公式不需要变换,有些统计公式需要按照定义的规则进行一定的变换,以避免每次数据更新时需要重新扫描整个表进行重新计算。
在数据库的系统表中记录统计公式的步骤可以包括:以创建语句的形式保存统计公式;或者对统计公式进行编译,以得到与统计公式对应的可执行代码,并保存与统计公式对应的可执行代码。也即在保存统计公式时,可以保存计算公式的SQL形式,例如max(score)、sum(num)等,也可以通过一些编译技术(如JIT等)将统计公式编译成可执行代码,以编译在修改索引时加快速度。
步骤S106,根据统计公式对被索引关系的被统计项进行统计,并将统计得到的聚合数据存储于统计文件中;
步骤S108,在索引文件中记录索引键值、被统计项在被索引关系中的位置、以及聚合数据在统计文件中位置三者的对应关系。
生成的索引可以随数据的更新而更新,从而在步骤S108之后还可以包括:获取被索引关系的操作,并判断操作是否触发被索引关系的修改;若是,根据被索引关系的修改对索引文件以及统计文件进行修改。
生成的索引可用于后续的统计查询,从而在步骤S108之后还可以包括:获取被索引关系的统计查询,并判断统计查询是否针对聚合数据;若是,通过索引文件查询出聚合数据,并响应统计查询。
本实施例的数据库聚合索引的生成方法,在获取到数据库索引的创建语句,创建索引文件以及统计文件,统计文件用于保存索引文件通过统计计算得到的聚合数据。索引文件有序性提高了统计查询的处理效率;另一方面统计文件的聚合数据随着数据的变化而相应更新,保证了数据的实时性。索引文件只保存对应的聚合在文件中的位置,统计数据保存在另外的统计文件中,进一步提高了可靠性。
上述生成的聚合索引是一种新型的索引,该索引被命名为聚合索引。聚合索引的目的是利用索引的的形式保存数据的统计信息,避免了现有技术在处理统计查询时,使用聚合操作生成统计信息,出现的处理耗时消耗资源大的问题。
聚合索引利用数据库中BTREE索引或其他索引技术的有序性来加快信息的检索,借助于索引随更新数据相应更新的特性来保证统计信息的实时性。聚合索引还可以利用事务提交时索引数据更新才提交来保证数据的可见性,甚至可以利用索引的分区来实现加快统计信息的访问速度。
图2是根据本发明一个实施例的数据库索引的生成方法实现的聚合索引的数据结构示意图,图3是根据本发明一个实施例的数据库索引的生成方法实现的聚合索引的一节点的数据示意图。
图2中以Btree结构为例进行介绍,聚合索引的索引部分110按照索引键值的构建,其中4、32、64等均为举例的索引键值,其可以为数据id,非叶节点上具有下一层节点的指针。聚合索引的数据部分120上保存有索引键值对应的数据data的位置,也即数据data的指针。
除了数据data位置之外,聚合索引还包括用于统计信息value的统计文件,如图3所示,聚合索引进行了去重处理,同一个索引键值44对应有三个数据,通过统计文件还关联还保存了对数据的统计信息value。
聚合索引的数据结构在数据库的索引结构(例如Btree结构)的基础上进行改进,一方面拥有现有索引的结构,另一方面还增加了新的特性。
本实施例的方法生成的聚合索引在索引的数据结构中,增加一个列表字段用于保存统计信息。每次更新数据时,在更新索引指定的数据指针的基础上,该统计信息也会重新计算。
统计信息字段的长度和内容在创建索引时进行定义。例如,指定对id列的统计信息为select id,sum(val)from t group by id.则每次更新id=1的数据时,会对id=1对应的sum(val)值重新计算然后更新到统计文件中。
聚合索引中保存的数据可以通过设置选择是否为去重后的值,即在聚合索引中,可以是每个数据行有一个索引节点,也可以所有索引键值相同的数据行公用一个索引节点。
对于要保存的聚合操作是分组groupby或去重distinct的操作,聚合索引中可以只保留去除重复值后的数据。例如表table(id int)中插入两行数据的id列值都是1的情况下,在聚合索引可以只保留一个键值,键值对应的指向数据的指针为一个数组,数组中保留指向这两行数据的指针。相当于原来BTREE的数据保存形式为两个索引:(key=1,value=(1))、(key=1,value=(1))。在聚集索引中数据的保存形式为(key=1,value=((1),(1)),aggval=())。其中aggval=()括号中的值为需要计算的统计信息value。通过这种方式,在数据查询时,可以节省掉分组和去重操作的时间。
通过以上描述可以看出,聚合索引在索引数据结构的基础,进一步增加了对应的数据data的位置(一般为索引键值对应的数据行位置)以及统计信息value在统计文件中的位置。也即新加入两个链表:保存该索引键值对应的所有数据行位置的链表,和该索引键值对应所有统计值在统计文件中的位置的链表。
作为聚合数据的统计信息保存在独立的统计文件。在索引文件中,只保存对应的统计信息在统计文件中的位置。假设一个聚合索引的键值A,其对应的数据在数据文件的位置为B,现有的索引文件保存的是A与B的对应关系:(A->B)。本实施例的方案加入一个统计文件C。聚合索引文件保存的是(A->(B,C)),也即保存A与B、C的对应关系。其中数据文件B的变化会引起索引文件A的修改,同时引起统计文件C的修改。除了以上的触发条件,统计文件C不会主动发生更新。
创建语句可以指定索引的索引类型以及索引数据结构(例如Btree或者hash结构)。创建语句的一种可选语法为:
CREATE[UNIQUE]INDEX[CONCURRENTLY]name ON table[USING method]
其中,CREATE为创建命令;[UNIQUE]表明索引的每一个索引键值对应唯一数据记录,为可选的设置项;[CONCURRENTLY]为可选的设置项,表明创建索引期间不阻塞DML(删除、修改、插入)操作;[USING method]为索引类型。本实施例的生成的聚合索引的类型可以定义为AGGREGATE。
例如对于创建语句1:CREATE INDEX idx1 ON t using AGGREGATE(select id,max(score)from t group by id)。其功能为在表t的id列上建立聚合索引,聚合索引中保存该id对应的max(score)值。创建语句1中,被索引关系为表t的id列。
又例如对于创建语句2:CREATE INDEX idx1 ON t using AGGREGATE(selectcountry,province,sum(num),max(score)from t group by country,province)。其功能为在表t的country,province列上建立聚合索引,聚合索引中保存该country,province对应的sum(num)和max(score)值。统计公式(统计函数)为max(score);创建语句2中,被索引关系为表t的country,province列,统计公式(统计函数)有两个分别为:sum(num)和max(score)。
数据库解析器对创建语句进行语法语义分析时,如果确定索引的类型为aggregate,则调用聚合索引创建流程,启动聚合索引的创建。例如CREATE INDEX idx1 ONt using AGGREGATE(select id,max(score)from t group by id)的语句在语法分析时得到在表t的id列上,创建聚合(AGGREGATE)索引,在统计文件中保存的索引的键值对应的统计数据为max(score)。
索引数据表,索引数据表可以采用BTree数据结构等有序索引结构;在数据库的系统表中记录统计公式以及索引数据表与被索引关系的对应关系。也就是说创建聚合索引的过程中,首先创建一个数据表t_index,然后在数据库系统表中记录数据表t(被索引关系)和索引数据表t_index的对应关系,在系统表中还记录下索引的其他信息,如类型aggregate,对应的键值id,对应的统计信息计算公式等。
在数据库的系统表中记录统计公式的步骤可以包括:以创建语句的形式保存统计公式;或者对统计公式进行编译,以得到与统计公式对应的可执行代码,并保存与统计公式对应的可执行代码。也即在保存统计公式时,可以保存计算公式的SQL形式,例如max(score)、sum(num)等,也可以通过一些编译技术(如JIT等)将统计公式编译成可执行代码,以编译在修改索引时加快速度。
在数据库的系统表中记录统计公式的步骤之前还可以判断统计公式是否定义有对应的转换规则;若是,对按照对应的转换规则对统计进行转换;并且在数据库的系统表中记录统计公式的步骤包括:在数据库的系统表中记录转换后的统计公式。
不同的统计公式的转换要求不同。有些统计公式不需要变换,有些统计公式需要按照定义的规则进行一定的变换,以避免每次数据更新时需要重新扫描整个表进行重新计算。例如对于创建语句1,统计max(score)时,只需要保存max(score),这样当数据表t插入数据的值比当前值大才需要更新,当删除的值是最大值时,才需要重新统计该键值的统计信息。又例如如果统计为求平均值avg(score)时,因为平均值avg=总数/个数=sum/count,需要存储sum(score)和count聚合函数的信息。
考虑到统计信息的值为一些整数或浮点数的集合,在定义聚合索引时统计信息的列表的长度和占用空间已经可以确定。那么在创建索引数据表的步骤之后还可以包括:确定统计信息的数据长度;按照数据长度为索引数据表分配空间。
例如,定义索引时限制条件为select id,sum(val),max(score)from t group byid。如果val为int类型,score为float类型,则对列为id的聚合索引,统计文件对每个键值需要分配额外的空间大小应为sizeof(int)+sizeof(float),也即int类型的大小和float类型的大小。
上述方法,在获取到数据库索引的创建语句后,创建聚合索引,利用聚合索引预先统计并保存后续常用统计查询的结果,便于后续统计查询时方便快速地提供数据。一方面借助于索引的有序性提高了统计查询的处理效率;另一方面聚合索引随着数据的变化而相应更新,保证了数据的实时性。聚合索引的聚合数据通过对被索引关系(可以为单表或者子查询的结果表)的全部相关数据统计得出,保证了统计数据的准确性。
统计信息保存在聚合索引的索引文件中。即对每一个索引键值,通过分配额外的空间来保存统计信息。
聚合索引具有如下特点:索引键值不重复、聚合索引中包含可以灵活定义的统计信息、索引为排序索引、数据变化时实时更新。
图4是根据本发明一个实施例的数据库索引的更新方法的流程示意图。该更新方法包括:
步骤S402,获取到更新数据的请求;在聚合索引关联的数据表发生DML(INSERT、UPDATE、DELETE,插入、更新、删除)操作时,会同时触发聚合索引的更新;
步骤S404,执行数据更新。也即对数据库表中的数据进行修改。
步骤S406,执行聚合索引更新。对改动的每一行数据,从系统表中得到该表对应的所有索引,依次进行修改。
步骤S406处理聚合索引时首先按照BTREE索引的方式进行索引键值的查询。针对插入数据,查找到索引键值在BTREE中的节点位置。如果当索引键值在BTREE节点中已经存在且该聚合索引要求键值不重复,在索引键值对应的数据空间上,其对应的数据位置的链表上分配一个空间来保存当前记录的位置。然后计算该键值对应的统计信息。如果索引键值不存在,则分配一个新的索引键值。在统计文件中保存该索引键值对应的数据。然后重新计算该索引键值的统计信息。
针对删除数据,首先更新数据位置链表,将该索引键值对应的数据行删除。如果删除后该链表为空,则删除该索引键值的键值,否则仅在统计文件中删除后重新计算统计信息值。
在修改聚合数据时,首先从数据库系统表中读取该聚合索引上定义的所有统计公式。然后遍历统计公式的集合,对每一个值分别进行统计计算。统计计算时需要根据不同统计公式判断是否需要重新计算统计数据。对一些特定的统计公式,如max(最大值)、min(最小值)、count(计数)等,只需要将当前行的数据值和保存的原来的聚合数据进行运算即可。对于其他的统计公式,可以遍历该索引键值对应的所有数据行,依次取该索引值对应的所有数据,重新计算其聚合数据。
在数据库机制中,数据更新时,同时也会更新索引信息。在索引信息更新时,同时也更新索引信息中的统计信息。
例如:对于聚合索引:CREATE INDEX idx1 ON t using AGGREGATE(select id,max(score)from t group by id)。在执行update t set score=100where id=1and val<10的数据操作时,此时聚合索引的更新操作为:通过id=1索引找到所有满足id=1的数据行;对每行记录判断val<10,满足条件的记录则执行数据更新;每行记录计算max(score);将最终max(score)结果更新到聚合索引的聚合数据中。
图5是根据本发明一个实施例的数据库索引的使用方法的流程示意图。该使用方法包括:
步骤S502,获取并解析统计查询;
步骤S504,判断统计查询的列上是否存在聚合索引;
步骤S506,数据库优化器直接制定执行计划
步骤S508,利用聚合索引生成执行计划;
步骤S510,在聚合索引上进行检索;
步骤S512,对检索结果进行二次计算。
在使用聚合索引执行统计查询时,SQL语句会经历解析、优化、执行三个阶段最终返回查询结果。其中步骤S502为解析过程,优化器完成步骤S504、步骤S508、执行器完成步骤S510、步骤S512。
其中在优化器阶段,判断如果一些统计查询的查询满足聚合索引的查询条件,会为该子查询生成聚合索引的执行计划。
例如对于查询语句:select*from a,(select id,sum(score)from b group byid)x where x.id=a.id.
现有技对上述查询语句的执行计划如下:
NestLoop Join(a.id=b.id)
SeqScan on a
HashAggregate(b.id)
SeqScan on b
也即现有技术的执行计划中,对表a的每一条记录,对表b都要执行一次扫描和聚合统计计算。当表b的数据非常大时,此查询操作会非常耗时。
应用实施例实现的聚合索引时,使用创建语句:CREATE INDEX idx1 ON b usingAGGREGATE(select id,sum(score)from b group by id)创建聚合索引。
优化器使用聚合索引生成执行计划时,判断出表b中的列id存在聚合索引,进一步查询全部聚合查询的操作都存在于聚合索引预先形成聚合数据中,则会为表b产生一种基于聚合索引查询计划。其执行计划可能为:
NestLoop Join(a.id=b.id)
SeqScan on a
AggIndexScan on b(b.id)
也即对表a的每条记录,对表b都执行一次索引扫描。且因为统计查询的结果已经在聚合索引的聚合数据中保存,可以直接返回聚合数据的结果。
通过上述介绍可以看出,应用本实施例的方法,可以大大提升聚合查询的处理效率。
数据库优化器在处理统计查询请求时,判断统计查询涉及聚合索引所在的列,且聚合索引满足聚合运算的条件,则生成使用聚合索引查询的执行计划。执行器在执行聚合索引时,查询索引得到统计信息,然后利用统计信息进行二次运算返回最终的结果。使用聚合索引进行查询,不再需要对数据表进行扫描并进行复杂的聚合运算,而只是把索引中保存的统计信息进行简单的二次运算然后返回。所以SQL的执行时间以及对硬件资源的占用极大的减少。
本实施例还提供了一种机器可读存储介质和计算机设备。图6是根据本发明一个实施例的机器可读存储介质40的示意图,图7是根据本发明一个实施例的计算机设备50的示意图。
机器可读存储介质40其上存储有机器可执行程序41,机器可执行程序41被处理器执行时实现上述任一实施例的数据库聚合索引的生成方法。
计算机设备50可以包括存储器520、处理器510及存储在存储器520上并在处理器510上运行的机器可执行程序41,并且处理器510执行机器可执行程序41时实现上述任一实施例的数据库聚合索引的生成方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
就本实施例的描述而言,机器可读存储介质40可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。机器可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,机器可读存储介质40甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。
计算机设备50可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备50可以是云计算节点。计算机设备50可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备50可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
计算机设备50可以包括适于执行存储的指令的处理器510、在操作期间为所述指令的操作提供临时存储空间的存储器520。处理器510可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器520可以包括随机存取存储器(RAM)、只读存储器、闪存或任何其他合适的存储系统。
处理器510可以通过系统互连(例如PCI、PCI-Express等)连接到适于将计算机设备50连接到一个或多个I/O设备(输入/输出设备)的I/O接口(输入/输出接口)。I/O设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。I/O设备可以是计算机设备50的内置组件,或者可以是外部连接到计算设备的设备。
处理器510也可以通过系统互连链接到适于将计算机设备50连接到显示设备的显示接口。显示设备可以包括作为计算机设备50的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备50的计算机监视器、电视机或投影仪等。此外,网络接口控制器(network interface controller,NIC)可以适于通过系统互连将计算机设备50连接到网络。在一些实施例中,NIC可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(WAN))、局域网(LAN)或因特网等等。远程设备可以通过网络连接到计算设备。
本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
Claims (10)
1.一种数据库聚合索引的生成方法,包括:
获取用于创建所述聚合索引的语句,并根据所述语句确定出统计公式和被索引关系;
创建索引文件以及统计文件;
根据所述统计公式对所述被索引关系的被统计项进行统计,并将统计得到的聚合数据存储于统计文件中;
在所述索引文件中记录索引键值、所述被统计项在被索引关系中的位置、以及所述聚合数据在所述统计文件中位置三者的对应关系。
2.根据权利要求1所述的数据库聚合索引的生成方法,其中
在所述创建索引文件以及统计文件之前还包括:获取所述聚合索引的去重设置;并且
所述将统计得到的聚合数据存储于统计文件中的步骤还包括:根据所述去重设置确定对所述被索引关系中重复的被统计项单独保存对应的统计值或仅保存一个统计值。
3.根据权利要求1所述的数据库聚合索引的生成方法,其中
所述被索引关系为单表或者通过子查询得到的关联多个表的查询结果。
4.根据权利要求1所述的数据库聚合索引的生成方法,其中,在根据所述语句确定出统计公式和被索引关系的步骤之后还包括:
在所述数据库的系统表中记录所述统计公式以及所述索引文件与所述被索引关系的对应关系。
5.根据权利要求4所述的数据库聚合索引的生成方法,其中,在所述数据库的系统表中记录所述统计公式的步骤包括:
对所述统计公式进行编译,以得到与所述统计公式对应的可执行代码;
保存与所述统计公式对应的可执行代码。
6.根据权利要求4所述的数据库聚合索引的生成方法,其中,
在所述数据库的系统表中记录所述统计公式的步骤之前还包括:
判断所述统计公式是否定义有对应的转换规则;
若是,对按照所述对应的转换规则对所述统计进行转换;并且
在所述数据库的系统表中记录所述统计公式的步骤包括:在所述数据库的系统表中记录转换后的所述统计公式。
7.根据权利要求1所述的数据库聚合索引的生成方法,其中,所述在所述索引文件中记录索引键值、所述被统计项在被索引关系中的位置、以及所述聚合数据在所述统计文件中位置三者的对应关系的步骤之后还包括:
获取所述被索引关系的操作,并判断所述操作是否触发所述被索引关系的修改;
若是,根据所述被索引关系的修改对所述索引文件以及所述统计文件进行修改。
8.根据权利要求1所述的数据库聚合索引的生成方法,其中,在所述索引文件中记录索引键值、索引键值对应数据在被索引关系中的位置、以及所述聚合数据在所述统计文件中位置三者的对应关系的步骤之后还包括:
获取所述被索引关系的统计查询,并判断所述统计查询是否针对所述聚合数据;
若是,通过所述索引文件查询出所述聚合数据,并响应所述统计查询。
9.一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理器执行时实现根据权利要求1至8任一项所述的数据库聚合索引的生成方法。
10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据权利要求1至8任一项所述的数据库聚合索引的生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211034740.8A CN115391346A (zh) | 2022-08-26 | 2022-08-26 | 数据库聚合索引的生成方法、存储介质与计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211034740.8A CN115391346A (zh) | 2022-08-26 | 2022-08-26 | 数据库聚合索引的生成方法、存储介质与计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115391346A true CN115391346A (zh) | 2022-11-25 |
Family
ID=84123570
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211034740.8A Pending CN115391346A (zh) | 2022-08-26 | 2022-08-26 | 数据库聚合索引的生成方法、存储介质与计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115391346A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349347A (zh) * | 2023-12-05 | 2024-01-05 | 北京天元特通科技有限公司 | 数据集的更新统计方法、装置、电子设备及存储介质 |
-
2022
- 2022-08-26 CN CN202211034740.8A patent/CN115391346A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349347A (zh) * | 2023-12-05 | 2024-01-05 | 北京天元特通科技有限公司 | 数据集的更新统计方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10606834B2 (en) | Methods and apparatus of shared expression evaluation across RDBMS and storage layer | |
CN108363746B (zh) | 一种支持多源异构数据的统一sql查询系统 | |
EP2605158B1 (en) | Mixed join of row and column database tables in native orientation | |
US10055509B2 (en) | Constructing an in-memory representation of a graph | |
US6850925B2 (en) | Query optimization by sub-plan memoization | |
US9514187B2 (en) | Techniques for using zone map information for post index access pruning | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US8700605B1 (en) | Estimating rows returned by recursive queries using fanout | |
US8332389B2 (en) | Join order for a database query | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US9141666B2 (en) | Incremental maintenance of range-partitioned statistics for query optimization | |
US10783142B2 (en) | Efficient data retrieval in staged use of in-memory cursor duration temporary tables | |
US8812489B2 (en) | Swapping expected and candidate affinities in a query plan cache | |
CN104765731A (zh) | 数据库查询优化方法和设备 | |
US20160342646A1 (en) | Database query cursor management | |
US20230315727A1 (en) | Cost-based query optimization for untyped fields in database systems | |
WO2021229380A1 (en) | Efficient indexing for querying arrays in databases | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
CN115391346A (zh) | 数据库聚合索引的生成方法、存储介质与计算机设备 | |
CN115374121A (zh) | 数据库索引的生成方法、机器可读存储介质与计算机设备 | |
CN115391424A (zh) | 数据库查询的处理方法、存储介质与计算机设备 | |
CN115470220A (zh) | 数据库索引的更新方法、存储介质与计算机设备 | |
CN115391363A (zh) | 数据库索引的更新方法、存储介质与计算机设备 | |
CN115809268B (zh) | 一种基于分片索引的自适应查询方法和装置 | |
US11157500B2 (en) | Determination of query operator execution location |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |