CN115470220A - 数据库索引的更新方法、存储介质与计算机设备 - Google Patents
数据库索引的更新方法、存储介质与计算机设备 Download PDFInfo
- Publication number
- CN115470220A CN115470220A CN202211034765.8A CN202211034765A CN115470220A CN 115470220 A CN115470220 A CN 115470220A CN 202211034765 A CN202211034765 A CN 202211034765A CN 115470220 A CN115470220 A CN 115470220A
- Authority
- CN
- China
- Prior art keywords
- index
- data
- database
- aggregation
- statistical
- 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/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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据库索引的更新方法、存储介质与计算机设备,其中更新方法,包括:获取触发数据库的聚合索引更新的数据操作,并按照数据操作对数据库的目标数据表进行数据修改;读取聚合索引预先定义的统计公式;使用统计公式对修改的数据进行统计计算,得到统计信息;使用统计信息更新聚合索引的聚合数据。本发明的方案中,使用聚合索引预先定义的统计公式对修改的数据进行统计计算,并将计算得到的统计信息作为聚合索引的聚合数据,从而聚合索引随数据更新而及时更新,从而使得聚合索引提供的聚合数据更加准确及时。
Description
技术领域
本发明涉及数据库技术,特别是涉及一种数据库索引的更新方法、存储介质与计算机设备。
背景技术
分析性数据库应用中通常会存在大量的统计查询语句。这些语句的处理比较耗时而且需要占用大量的硬件资源。这些语句中使用大量的聚合操作,用于生成统计信息,如分组,去重,求和,计数等。
为了提高这些统计查询的处理效率,现有数据库技术中提出了的一些解决方案,例如物化视图,列存,利用抽样的统计信息计算近似值等,但这些技术都存在一定程度的局限性。例如,物化视图不能实时反应数据更新,需要通过刷新来反映数据变化,频繁的刷新也同样消耗大量资源。列存为了得到一个列统计,需要导入列的所有数据,效率较差。而抽样统计只能得到近似值,不够精确。
针对上述问题,较为理想的一种解决方式为将一些常用并且查询比较耗时的统计数据保存起来以便于下次查询时直接使用。然而数据库的数据处于动态的过程中,一旦数据出现更新,相关的统计数据也会出现变化,这使得上述技术思路在现有技术中无法实现。
发明内容
本发明的一个目的是要保证聚合索引中聚合数据的实时性。
本发明一个进一步的目的是提高聚合索引的更新处理效率。
特别地,本发明提供了一种数据库索引的更新方法,包括:
获取触发数据库的聚合索引更新的数据操作,并按照数据操作对数据库的目标数据表进行数据修改;
读取聚合索引预先定义的统计公式;
使用统计公式对修改的数据进行统计计算,得到统计信息;
使用统计信息更新聚合索引的聚合数据。
可选地,使用统计公式对修改的数据进行统计计算的步骤包括:
根据统计公式确定参与统计计算的目标数据;
获取目标数据;
使用统计公式对目标数据以及修改的数据进行统计计算。
可选地,获取目标数据的步骤包括:
若目标数据为与修改的数据具有相同索引键值的所有数据,则从目标数据表中遍历具有相同索引键值的所有数据。
可选地,获取目标数据的步骤包括:
若目标数据为更新前的聚合数据,则读取聚合索引当前记录的聚合数据。
可选地,获取触发数据库的聚合索引更新的数据操作的步骤包括:
接收对数据库的数据操作;
判断数据操作的目标数据表是否预先建立有对应的聚合索引;
若是,确定数据操作触发数据库的聚合索引更新。
可选地,判断数据操作的目标数据表是否预先建立有对应的聚合索引的步骤包括:
查询数据库的系统表中是否存在目标数据表的聚合索引记录;
若是,则判定目标数据表预先建立有对应的聚合索引;
若否,则判定目标数据表没有建立对应的聚合索引。
可选地,读取聚合索引预先定义的统计公式的步骤包括:
查询数据库的系统表中与聚合索引记录对应的统计公式,统计公式以SQL函数形式或者编译的可执行代码的形式进行保存。
可选地,数据库的数据操作包括以下任意一种或多种:插入数据的操作、删除数据的操作、更新数据的操作。
根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的数据库索引的更新方法。
根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的数据库索引的更新方法。
本发明的数据库索引的更新方法,在获取触发数据库的聚合索引更新的数据操作并按照数据操作对数据库的目标数据表进行数据修改之后,使用聚合索引预先定义的统计公式对修改的数据进行统计计算,并将计算得到的统计信息作为聚合索引的聚合数据,从而聚合索引随数据更新而及时更新,从而使得聚合索引提供的聚合数据更加准确及时。
进一步地,本发明的数据库索引的更新方法,针对数据的插入、删除、更新等操作分别针对性地进行数据库索引及其聚合数据的更新,更新过程高效及时,便于后续统计查询时方便快速地提供数据。
进一步地,本发明的数据库索引的更新方法,可以根据统计公式确定所需的目标数据,对于某些统计公式可以使用更新前的聚合数据,避免了对全部相关数据进行全部重新统计,提高了数据处理效率。
更进一步地,本发明的数据库索引的更新方法,在修改聚合数据是,可以对该索引上定义的全部统计公式进行遍历,并对需要重新统计的统计公式,分别进行计算。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
图1是根据本发明一个实施例的数据库索引的更新方法针对的聚合索引的数据结构示意图;
图2是根据本发明一个实施例的数据库索引的更新方法针对的聚合索引中一节点的数据示意图;
图3是根据本发明一个实施例的数据库索引的更新方法的整体流程示意图;
图4是根据本发明一个实施例的数据库索引的更新方法中聚合索引的修改流程图;
图5是根据本发明一个实施例的数据库索引的更新方法的示意流程图;
图6是根据本发明一个实施例的数据库索引的使用方法的流程示意图;
图7是根据本发明一个实施例的机器可读存储介质的示意图;以及
图8是根据本发明一个实施例的计算机设备的示意图。
具体实施方式
本实施例的数据库索引的更新方法针对于一种新型的索引,该索引被命名为聚合索引。聚合索引的目的是利用索引的的形式保存数据的统计信息,避免了现有技术在处理统计查询时,使用聚合操作生成统计信息,出现的处理耗时消耗资源大的问题。
聚合索引可以利用数据库中BTREE索引或其他索引技术的有序性来加快信息的检索,借助于索引随更新数据相应更新的特性来保证统计信息的实时性。聚合索引还可以利用事务提交时索引数据更新才提交来保证数据的可见性,甚至可以利用索引的分区来实现加快统计信息的访问速度。
图1是根据本发明一个实施例的数据库索引的更新方法针对的聚合索引的数据结构示意图,图2是根据本发明一个实施例的数据库索引的更新方法针对的聚合索引中一节点的数据示意图。
图1中以Btree结构为例进行介绍,聚合索引的索引部分110按照索引键值的构建,其中4、32、64等均为举例的索引键值,其可以为数据id,非叶节点上具有下一层节点的指针。聚合索引的数据部分120上保存有索引键值对应的数据data的位置,也即数据data的指针。
数据部分120除了数据data位置之外还是设置有统计信息value,如图2所示,聚合索引进行了去重处理,同一个索引键值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。也即新加入两个链表:保存该索引键值对应的所有数据行位置的链表,和该索引键值对应所有统计值的链表。
本实施例的数据库索引的更新方法针对的聚合索引的生成过程包括:获取数据库索引的创建语句;对创建语句进行语义分析,得到被索引关系以及统计公式;创建聚合索引;根据统计公式对被索引关系进行统计,得到统计信息;将统计信息作为聚合数据在聚合索引中进行保存。
其中创建语句可以指定索引的索引类型以及索引数据结构(例如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)值。
又例如对于创建语句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)值。
创建语句通过语义分析得到的被索引关系可以是数据库的单表,也可以是数据库关联多个表的子查询,也就是说聚合索引可以创建在数据库的单表之上,也可以创建一个关联多个表的子查询之上。这也是与现有索引的重要区别。
例如对于上述的创建语句1,被索引关系为表t的id列,统计公式(统计函数)为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类型的大小。
根据统计公式对被索引关系进行统计的统计过程可以根据统计公式对被索引关系(数据表t)相应列进行读取后进行。
统计信息作为聚合数据在聚合索引中进行保存,也即在聚合索引的键值对应的用于存储统计信息的链表中进行存储,存储后的统计信息称为聚合索引的聚合数据。
上述方法,在获取到数据库索引的创建语句后,创建聚合索引,利用聚合索引预先统计并保存后续常用统计查询的结果,便于后续统计查询时方便快速地提供数据。一方面借助于索引的有序性提高了统计查询的处理效率;另一方面聚合索引随着数据的变化而相应更新,保证了数据的实时性。聚合索引的聚合数据通过对被索引关系(可以为单表或者子查询的结果表)的全部相关数据统计得出,保证了统计数据的准确性。
统计信息保存在聚合索引的数据结构中。即对每一个索引键值,在聚合索引的数据结构中分配额外的空间来保存统计信息。
聚合索引具有如下特点:索引键值不重复、聚合索引中包含可以灵活定义的统计信息、索引为排序索引、数据变化时实时更新。
可替代地,还可以将统计信息保存在另外的文件中形成一个新的数据文件。在索引文件中,只保存对应的统计信息在文件中的位置。假设一个索引文件的键值A,其对应的数据在数据文件的位置为B。传统的索引文件保存的是A与B的对应关系(A->B)。本实施例的方法可以加入一个统计文件C。聚合索引文件保存的是(A->(B,C))。其中数据文件B的变化会引起索引文件A的修改,同时引起统计文件C的修改。除了以上的触发条件,统计文件C不会主动发生更新。
图3是根据本发明一个实施例的数据库索引的更新方法的整体流程示意图。该更新方法包括:
步骤S302,获取到更新数据的请求;在聚合索引关联的数据表发生DML(INSERT、UPDATE、DELETE,插入、更新、删除)操作时,会同时触发聚合索引的更新;
步骤S304,执行数据更新。也即对数据库表中的数据进行修改。
步骤S306,执行聚合索引更新。对改动的每一行数据,从系统表中得到该表对应的所有索引,依次进行修改。
对于BTREE结构的聚合索引,首先按照BTREE索引的方式进行索引键值的查询,然后进行更新索引的操作。
步骤S306处理聚合索引时首先按照BTREE索引的方式进行索引键值的查询。针对插入数据,查找到索引键值在BTREE中的节点位置。如果当索引键值在BTREE节点中已经存在且该聚合索引要求键值不重复,在索引键值对应的数据空间上,其对应的数据位置的链表上分配一个空间来保存当前记录的位置。然后计算该键值对应的统计信息。如果索引键值不存在,则分配一个新的索引键值。保存该索引键值对应的数据。然后重新计算该索引键值的统计信息。
图4是根据本发明一个实施例的数据库索引的更新方法中聚合索引的修改流程图,该数据库索引的更新方法一般性地可以包括:
步骤S402,获取对数据库的数据操作;
步骤S404,判断数据操作的目标数据表是否预先建立有对应的聚合索引;
步骤S406,若是,在按照数据操作对目标数据表进行数据修改后,查找被修改数据在聚合索引中的节点位置;
步骤S408,根据数据操作更新聚合索引的节点。
在没有预先建立有对应的聚合索引的情况下,可以直接执行数据库的数据操作。上述方法可以使得聚合索引随数据更新而及时更新,从而使得聚合索引提供的统计数据更加准确及时。
判断数据操作的目标数据表是否预先建立有对应的聚合索引的步骤可以包括:查询数据库的系统表中是否存在目标数据表的聚合索引记录;若是,则判定目标数据表预先建立有对应的聚合索引;若否,则判定目标数据表没有建立对应的聚合索引。
在聚合索引关联的数据表发生DML(INSERT、UPDATE、DELETE,插入、更新、删除)操作时,会同时触发聚合索引的更新。
对插入数据的操作,更新聚合索引的节点的步骤包括:判断插入数据的键值是否在聚合索引的节点中已存在;若否,在聚合索引中为插入数据分配新的键值。如果判定插入数据的键值在聚合索引的节点中已存在,则获取对聚合索引的去重设置;若去重设置为不去重,则在聚合索引的键值的链表上分配空间,以记录插入数据的位置;若去重设置为去重生效,则维持聚合索引的节点不变。通过上述流程,本实施例的方法可以高效地根据插入数据对聚合索引进行更新。
对删除数据的操作,更新聚合索引的节点的步骤包括:在聚合索引中删除与被删除数据对应的记录。在聚合索引中删除与被删除数据对应的记录的步骤之后还包括:判断聚合索引中被删除数据的节点的链表是否为空;若是,则在聚合索引中删除被删除数据的键值以及节点。通过上述流程,本实施例的方法可以高效地根据删除数据对聚合索引进行更新。
图5是根据本发明一个实施例的数据库索引的更新方法的示意流程图。该更新方法主要对于聚合索引中的聚合数据进行更新,并且包括:
步骤S502,获取触发数据库的聚合索引更新的数据操作,并按照数据操作对数据库的目标数据表进行数据修改;也即执行上述已经介绍的获取到更新数据的请求,并执行数据更新的步骤。
一种可选地执行方式为:接收对数据库的数据操作;判断数据操作的目标数据表是否预先建立有对应的聚合索引;若是,确定数据操作触发数据库的聚合索引更新。判断数据操作的目标数据表是否预先建立有对应的聚合索引的步骤可以包括:判断数据操作的目标数据表是否预先建立有对应的聚合索引;若是,确定数据操作触发数据库的聚合索引更新。可以通过查询数据库的系统表中是否存在目标数据表的聚合索引记录来确定目标数据表是否预先建立有对应的聚合索引。如果数据库的系统表中存在目标数据表的聚合索引记录,则判定目标数据表预先建立有对应的聚合索引。如果数据库的系统表中不存在目标数据表的聚合索引记录,则判定目标数据表没有建立对应的聚合索引。
步骤S504,读取聚合索引预先定义的统计公式。可选地,可以从数据库系统表中读取该聚合索引上定义的所有统计公式。然后遍历统计公式的集合,对每一个值分别进行统计计算。
例如可以查询数据库的系统表中与聚合索引记录对应的统计公式,统计公式以SQL函数形式或者编译的可执行代码的形式进行保存。
步骤S506,使用统计公式对修改的数据进行统计计算,得到统计信息。使用统计公式对修改的数据进行统计计算的过程可以包括:根据统计公式确定参与统计计算的目标数据;获取目标数据;使用统计公式对目标数据以及修改的数据进行统计计算。
其中获取目标数据的步骤可以包括:若目标数据为与修改的数据具有相同索引键值的所有数据,则从目标数据表中遍历具有相同索引键值的所有数据。若目标数据为更新前的聚合数据,则读取聚合索引当前记录的聚合数据。
也就是说,统计计算时需要根据不同统计公式判断是否需要重新计算统计数据。对一些特定的统计公式,如max(最大值)、min(最小值)、count(计数)等,只需要将当前行的数据值和保存的原来的聚合数据进行运算即可。对于其他的统计公式,可以遍历该索引键值对应的所有数据行,依次取该索引值对应的所有数据,重新计算其聚合数据。
步骤S508,使用统计信息更新聚合索引的聚合数据。
在数据库机制中,数据更新时,同时也会更新索引信息。在索引信息更新时,同时也更新索引信息中的统计信息。
例如:对于聚合索引: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)结果更新到聚合索引的聚合数据中。
图6是根据本发明一个实施例的数据库索引的使用方法的流程示意图。该使用方法包括:
步骤S602,获取并解析统计查询;
步骤S604,判断统计查询的列上是否存在聚合索引;
步骤S606,数据库优化器直接制定执行计划
步骤S610,利用聚合索引生成执行计划;
步骤S612,在聚合索引上进行检索;
步骤S614,对检索结果进行二次计算。
在使用聚合索引执行统计查询时,SQL语句会经历解析、优化、执行三个阶段最终返回查询结果。其中步骤S602为解析过程,优化器完成步骤S604、步骤S610、执行器完成步骤S612、步骤S614。
其中在优化器阶段,判断如果一些统计查询的查询满足聚合索引的查询条件,会为该子查询生成聚合索引的执行计划。
例如对于查询语句: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 busing AGGREGATE(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的执行时间以及对硬件资源的占用极大的减少。
本实施例还提供了一种机器可读存储介质和计算机设备。图7是根据本发明一个实施例的机器可读存储介质70的示意图,图8是根据本发明一个实施例的计算机设备80的示意图。
机器可读存储介质70其上存储有机器可执行程序71,机器可执行程序71被处理器810执行时实现上述任一实施例的数据库索引的更新方法。
计算机设备80可以包括存储器820、处理器810及存储在存储器820上并在处理器810上运行的机器可执行程序71,并且处理器810执行机器可执行程序71时实现上述任一实施例的数据库索引的更新方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
就本实施例的描述而言,机器可读存储介质70可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。机器可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,机器可读存储介质50甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。
计算机设备80可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备80可以是云计算节点。计算机设备80可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备80可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
计算机设备80可以包括适于执行存储的指令的处理器810、在操作期间为所述指令的操作提供临时存储空间的存储器820。处理器810可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器820可以包括随机存取存储器(RAM)、只读存储器、闪存或任何其他合适的存储系统。
处理器810可以通过系统互连(例如PCI、PCI-Express等)连接到适于将计算机设备80连接到一个或多个I/O设备(输入/输出设备)的I/O接口(输入/输出接口)。I/O设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。I/O设备可以是计算机设备80的内置组件,或者可以是外部连接到计算设备的设备。
处理器810也可以通过系统互连链接到适于将计算机设备80连接到显示设备的显示接口。显示设备可以包括作为计算机设备80的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备80的计算机监视器、电视机或投影仪等。此外,网络接口控制器(network interface controller,NIC)可以适于通过系统互连将计算机设备80连接到网络。在一些实施例中,NIC可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(WAN))、局域网(LAN)或因特网等等。远程设备可以通过网络连接到计算设备。
本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
Claims (10)
1.一种数据库索引的更新方法,包括:
获取触发所述数据库的聚合索引更新的数据操作,并按照所述数据操作对所述数据库的目标数据表进行数据修改;
读取所述聚合索引预先定义的统计公式;
使用所述统计公式对修改的数据进行统计计算,得到统计信息;
使用所述统计信息更新所述聚合索引的聚合数据。
2.根据权利要求1所述的数据库索引的更新方法,其中所述使用所述统计公式对修改的数据进行统计计算的步骤包括:
根据所述统计公式确定参与统计计算的目标数据;
获取所述目标数据;
使用所述统计公式对所述目标数据以及所述修改的数据进行统计计算。
3.根据权利要求2所述的数据库索引的更新方法,其中,所述获取所述目标数据的步骤包括:
若所述目标数据为与所述修改的数据具有相同索引键值的所有数据,则从所述目标数据表中遍历所述具有相同索引键值的所有数据。
4.根据权利要求2所述的数据库索引的更新方法,其中,所述获取所述目标数据的步骤包括:
若所述目标数据为更新前的聚合数据,则读取所述聚合索引当前记录的聚合数据。
5.根据权利要求1所述的数据库索引的更新方法,其中,所述获取触发所述数据库的聚合索引更新的数据操作的步骤包括:
接收对所述数据库的数据操作;
判断所述数据操作的目标数据表是否预先建立有对应的聚合索引;
若是,确定所述数据操作触发所述数据库的聚合索引更新。
6.根据权利要求5所述的数据库索引的更新方法,其中,判断所述数据操作的目标数据表是否预先建立有对应的聚合索引的步骤包括:
查询所述数据库的系统表中是否存在所述目标数据表的聚合索引记录;
若是,则判定所述目标数据表预先建立有对应的聚合索引;
若否,则判定所述目标数据表没有建立对应的聚合索引。
7.根据权利要求6所述的数据库索引的更新方法,其中,所述读取所述聚合索引预先定义的统计公式的步骤包括:
查询所述数据库的系统表中与聚合索引记录对应的统计公式,所述统计公式以SQL函数形式或者编译的可执行代码的形式进行保存。
8.根据权利要求5所述的数据库索引的更新方法,其中,
所述数据库的数据操作包括以下任意一种或多种:插入数据的操作、删除数据的操作、更新数据的操作。
9.一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理器执行时实现根据权利要求1至8任一项所述的数据库索引的更新方法。
10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据权利要求1至8任一项所述的数据库索引的更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211034765.8A CN115470220A (zh) | 2022-08-26 | 2022-08-26 | 数据库索引的更新方法、存储介质与计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211034765.8A CN115470220A (zh) | 2022-08-26 | 2022-08-26 | 数据库索引的更新方法、存储介质与计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115470220A true CN115470220A (zh) | 2022-12-13 |
Family
ID=84370938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211034765.8A Pending CN115470220A (zh) | 2022-08-26 | 2022-08-26 | 数据库索引的更新方法、存储介质与计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115470220A (zh) |
-
2022
- 2022-08-26 CN CN202211034765.8A patent/CN115470220A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10606834B2 (en) | Methods and apparatus of shared expression evaluation across RDBMS and storage layer | |
US11663213B2 (en) | Distinct value estimation for query planning | |
EP2605158B1 (en) | Mixed join of row and column database tables in native orientation | |
US6850925B2 (en) | Query optimization by sub-plan memoization | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
CN108431805A (zh) | 并行执行具有递归子句的查询 | |
CN104765731A (zh) | 数据库查询优化方法和设备 | |
US20170116272A1 (en) | Efficient data retrieval in staged use of in-memory cursor duration temporary tables | |
US11416458B2 (en) | Efficient indexing for querying arrays in databases | |
US11709831B2 (en) | Cost-based query optimization for array fields in database systems | |
US20220277012A1 (en) | Workload-aware column inprints | |
CN115374121A (zh) | 数据库索引的生成方法、机器可读存储介质与计算机设备 | |
CN115391346A (zh) | 数据库聚合索引的生成方法、存储介质与计算机设备 | |
CN115391424A (zh) | 数据库查询的处理方法、存储介质与计算机设备 | |
US8832157B1 (en) | System, method, and computer-readable medium that facilitates efficient processing of distinct counts on several columns in a parallel processing system | |
CN110321388B (zh) | 一种基于Greenplum的快速排序查询方法及系统 | |
CN116467310A (zh) | 无效索引的无锁标记方法、存储介质和计算机设备 | |
CN115470220A (zh) | 数据库索引的更新方法、存储介质与计算机设备 | |
WO2023081153A1 (en) | Columnar cache query using hybrid query execution plan | |
CN115168361A (zh) | 一种标签管理方法和装置 | |
CN115391363A (zh) | 数据库索引的更新方法、存储介质与计算机设备 | |
CN115114297A (zh) | 数据轻量存储及查找方法、装置、电子设备及存储介质 | |
CN112818010B (zh) | 数据库查询方法及装置 | |
US20080016029A1 (en) | Optimizing a query to a database |
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 |