CN117131042A - 一种数据库函数索引实现方法及装置 - Google Patents
一种数据库函数索引实现方法及装置 Download PDFInfo
- Publication number
- CN117131042A CN117131042A CN202310956793.3A CN202310956793A CN117131042A CN 117131042 A CN117131042 A CN 117131042A CN 202310956793 A CN202310956793 A CN 202310956793A CN 117131042 A CN117131042 A CN 117131042A
- Authority
- CN
- China
- Prior art keywords
- index
- function
- data
- column
- value
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000004364 calculation method Methods 0.000 claims abstract description 6
- 230000006870 function Effects 0.000 claims description 126
- 238000012545 processing Methods 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 claims description 4
- 230000002776 aggregation Effects 0.000 claims description 3
- 238000004220 aggregation Methods 0.000 claims description 3
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 230000001960 triggered effect Effects 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 claims description 2
- 230000000694 effects Effects 0.000 abstract description 3
- 238000005457 optimization Methods 0.000 abstract description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
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
-
- 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/245—Query processing
- G06F16/2455—Query execution
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及查询语句优化领域,具体提供了一种数据库函数索引实现方法及装置,具有如下步骤:S1、函数索引的生成;S2、数据修改和回填对函数索引中数据的操作;S3、函数索引的选择与索引数据的查找。与现有技术相比,本发明当多次进行这个函数的数据的查询操作时,计算效果提升也会更加明显。
Description
技术领域
本发明涉及查询语句优化领域,具体提供一种数据库函数索引实现方法及装置。
背景技术
NewSQL技术近几年发展十分迅猛,国内外都有了较成熟的系统。在业界一些开源系统的实现中,Rocksdb起到了核心的存储和查询功能。Rocksdb是一个高性能的嵌入式持久化key-value存储。很多开源的数据库的存储都是内嵌的Rocksdb,以key-value的存储格式来存储数据。
而数据库的查询是数据库非常重要的功能之一,数据库进行一些查询时,有时需要频繁的对一个特定范围的数据进行读取,而若在只需要对这个范围的数据读取的情况下,却每一次都读取全部数据,数据库查询语句执行效率不高。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的数据库函数索引实现方法。
本发明进一步的技术任务是提供一种设计合理,安全适用的数据库函数索引实现装置。
本发明解决其技术问题所采用的技术方案是:
一种数据库函数索引实现方法,具有如下步骤:
S1、函数索引的生成;
S2、数据修改和回填对函数索引中数据的操作;
S3、函数索引的选择与索引数据的查找。
进一步的,在步骤S1中,索引树的结构增加一个结构,索引结构标志一个索引,里面包含索引的列属性,一个索引的索引列有几个就有几个IndexElem;
IndexElem里的结构成员有ColmnName即列名,标志了索引列的名字,添加一个Function,将函数索引中存放的函数信息放在索引列信息中去。
进一步的,IndexDescriptor是索引描述符,标志一个索引的所有信息,增加一个信息存放函数索引的函数;
复用现有的Expr存放函数表达式,谓词存储string,通过反序列化,得到函数表达式,函数索引是通过查询条件函数索引选定的行,对索引条件有一定要求,即只能是简单查询;
在语法解析后生成AST对查询语法树进行校验,把函数作为一个虚列存入索引中,所述函数不能为子查询,聚集函数,窗口函数和带返回值的函数,若是则报不支持类型错误。
进一步的,在步骤S2中,当数据进行增删改操作时,同时对索引进行数据的操作,当创建函数索引后,对数据进行的改动会对索引的函数值进行改变,在这个过程中通过之前在indexdescriptor存储的expr表达式解析出函数表达式;
在buildvalue构建值的时侯,通过funcexpr计算函数索引列的值,并将这个标志传入接下来的流程中;
在插入数据编码时判断传入的标志是否需要将一行数据编码插入到二级索引中。
进一步的,在create index,backfill模式中,使用到schema changer回填方式创建索引,进行回填的函数,回填即当表中存在数据时,新建索引要将表中数据的kv重新导入到索引中去。
进一步的,在insert中,首先进行(*insertNode).processSourceRow,然后进行(*tableInserter).row和InsertRow,最后进行encodeIndexes;
对要插入索引的数据进行编码,通过encodeIndexes得到kv后通过InsertRow将kv塞入存储中的索引去。
进一步的,在update中,查询旧值并记录,生成新值,对新值进行表达式处理;
对于符合谓词条件,不符合条件的行,要进行对应索引数据删除处理。
进一步的,在步骤S3中,在匹配投影列和索引列后,增加匹配函数,
如果函数匹配符合规则,则通过computeScanCost进行cbo的变动,最终由cbo选择函数索引,完成对索引的选择,之后直接读取索引中的数据无需进行计算。
进一步的,column_name是带有表中列的函数,当select表时where条件左值为函数索引的函数时,触发索引。
一种数据库函数索引实现装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种数据库函数索引实现方法。
本发明的一种数据库函数索引实现方法及装置和现有技术相比,具有以下突出的有益效果:
本发明通过大量的实验测得,当搜索函数索引索引列的函数时,并且这个部分的数据查询会被频繁调用的情况下,当cbo选择走函数索引的时候,由于可以直接有序的拉取索引中的计算好的函数值而不需要重新计算,查询效果会大大提升。当多次进行这个函数的数据的查询操作时,计算效果提升也会更加明显。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种数据库函数索引实现方法中函数索引生成的流程示意图;
附图2是一种数据库函数索引实现方法中create index,backfill模式的流程示意图;
附图3是一种数据库函数索引实现方法中insert操作的流程示意图;
附图4是一种数据库函数索引实现方法中函数索引功能语法示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
本实施例中的一种数据库函数索引实现方法,具有如下步骤:
S1、函数索引的生成;
索引树的结构增加一个结构:
type IndexElem struct{
Column Name
Function Expr
索引结构标志了一个索引,里面包含了索引的列属性,一个索引的索引列有几个就有几个IndexElem,IndexElem里的结构成员有ColmnName也就是列名,标志了索引列的名字,现在添加一个Function,也就是将函数索引中存放的函数信息放在索引列信息中去。
索引IndexDescriptor增加一个结构:
message IndexDescriptor{
...
optional string func_expr=20;
IndexDescriptor是索引描述符,标志一个索引的所有信息,同样的在这里增加一个信息存放函数索引的函数。
复用现有的Expr存放函数表达式,谓词存储string,通过反序列化,得到函数表达式。函数索引是通过查询条件函数索引选定的行,而不是所有的行,它对索引条件有一定要求,即只能是简单查询。
在语法解析后生成AST对查询语法树就应该进行校验,把函数作为一个虚列存入索引中。这个函数有一定的限制,它不能是子查询,聚集函数,窗口函数,带返回值的函数等,若是则报不支持类型错误。
如图1所示,
建立一个函数索引并查找;
建立一个表;
CREATE TABLE t1(a float);
CREATE TABLE
建立函数索引;
CREATE INDEX idx ON t1(abs(a));
CREATE INDEX
插入数据
INSERT INTO t1 VALUES(0),(1);
INSERT 2
查询数据
explain(opt,verbose)select*from t1 where abs(a)>-1;
scan t1@idx;
├──columns:a:1
├──constraint:/1/3/2:[/-0.9999999999999999-]
├──stats:[rows=333.333333]
└──cost:346.676667
(5rows)
计划中成功选择了函数索引。
S2、数据修改和回填对函数索引中数据的操作;
当数据进行增删改操作时,要对索引同时进行数据的操作。当创建函数索引后,对数据进行的改动会对索引的函数值进行改变。
在这个过程中通过之前在indexdescriptor存储的expr表达式解析出函数表达式。在buildvalue构建值的时侯,通过funcexpr计算函数索引列的值,并将这个标志传入接下来的流程中。
在插入数据编码时判断这个传入的标志是否需要将这一行数据编码插入到二级索引也就是上面说的行值子集的排序副本中去。
如图2所示,在create index,backfill模式中,使用到了schema changer回填方式创建索引,
(*SchemaChanger).distBackfill→backfiller.Run→indexbackfiller.runChunk→BuildIndexEntriesChunk→EncodeSecondaryIndexes;
.distBackfill,backfiller.Run,indexbackfiller.runChunk,BuildIndexEntriesChunk都是进行回填的函数,回填就是当表中存在数据时,新建索引要将表中数据的key/value重新导入到索引中去。
EncodeSecondaryIndexes创建索引的KV(即key/values),得到key/value后通过BuildIndexEntriesChunk将这个kv塞入存储中去。
如图3所示,在insert中,首先进行(*insertNode).processSourceRow,然后进行(*tableInserter).row和InsertRow,最后进行encodeIndexes;
这个流程就是插入数据的流程,同样的需要对要插入索引的数据进行编码。通过encodeIndexes得到KV(即key/value)后通过InsertRow将这个kv塞入存储中的索引去。同样是在encodeIndexes之前进行一遍函数值计算,再将结果插入索引中。
在update中,查询旧值并记录,生成新值,对新值进行表达式处理;
对于符合谓词条件,不符合条件的行,要进行对应索引数据删除处理,执行流程与Insert类似。
S3、函数索引的选择与索引数据的查找;
如图4所示,与完全索引不同的是,函数索引不能够满足所有查询。在匹配投影列和索引列后,增加匹配函数。
如果函数匹配符合规则,则通过computeScanCost进行cbo的变动,这就需要减少cbo的代价。最终由cbo选择函数索引,完成对索引的选择。之后直接读取索引中的数据无需进行计算。若表的总数据量很大,又要查询函数索引索引列的函数的值就可以很大程度上增加执行效率。
以下是函数索引功能语法:
CREATE opt_unique INDEX opt_index_name ON table_name opt_using_gin_btree'('index_params')'opt_storing opt_interleave
opt_partition_by opt_idx_where opt_locate_in
CREATE opt_unique INDEX IF NOT EXISTS index_name ON table_name opt_using_gin_btree'('index_params')'opt_storing opt_interleave opt_partition_byopt_idx_where opt_locate_in
column_name是带有表中列的函数。当select表时where条件左值为函数索引的函数时,触发索引。
改变函数索引中的数据和使用函数索引时的语法和普通索引相同。
基于上述方法,本实施例中的一种数据库函数索引实现装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行一种数据库函数索引实现方法。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明权利要求书记载的技术方案且任何所属技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (10)
1.一种数据库函数索引实现方法,其特征在于,具有如下步骤:
S1、函数索引的生成;
S2、数据修改和回填对函数索引中数据的操作;
S3、函数索引的选择与索引数据的查找。
2.根据权利要求1所述的一种数据库函数索引实现方法,其特征在于,在步骤S1中,索引树的结构增加一个结构,索引结构标志一个索引,里面包含索引的列属性,一个索引的索引列有几个就有几个IndexElem;
IndexElem里的结构成员有ColmnName即列名,标志了索引列的名字,添加一个Function,将函数索引中存放的函数信息放在索引列信息中去。
3.根据权利要求2所述的一种数据库函数索引实现方法,其特征在于,IndexDescriptor是索引描述符,标志一个索引的所有信息,增加一个信息存放函数索引的函数;
复用现有的Expr存放函数表达式,谓词存储string,通过反序列化,得到函数表达式,函数索引是通过查询条件函数索引选定的行,对索引条件有一定要求,即只能是简单查询;
在语法解析后生成AST对查询语法树进行校验,把函数作为一个虚列存入索引中,所述函数不能为子查询,聚集函数,窗口函数和带返回值的函数,若是则报不支持类型错误。
4.根据权利要求3所述的一种数据库函数索引实现方法,其特征在于,在步骤S2中,当数据进行增删改操作时,同时对索引进行数据的操作,当创建函数索引后,对数据进行的改动会对索引的函数值进行改变,在这个过程中通过之前在indexdescriptor存储的expr表达式解析出函数表达式;
在buildvalue构建值的时侯,通过funcexpr计算函数索引列的值,并将这个标志传入接下来的流程中;
在插入数据编码时判断传入的标志是否需要将一行数据编码插入到二级索引中。
5.根据权利要求4所述的一种数据库函数索引实现方法,其特征在于,在createindex,backfill模式中,使用到schema changer回填方式创建索引,进行回填的函数,回填即当表中存在数据时,新建索引要将表中数据的kv重新导入到索引中去。
6.根据权利要求5所述的一种数据库函数索引实现方法,其特征在于,在insert中,首先进行(*insertNode).processSourceRow,然后进行(*tableInserter).row和InsertRow,最后进行encodeIndexes;
对要插入索引的数据进行编码,通过encodeIndexes得到kv后通过InsertRow将kv塞入存储中的索引去。
7.根据权利要求6所述的一种数据库函数索引实现方法,其特征在于,在update中,查询旧值并记录,生成新值,对新值进行表达式处理;
对于符合谓词条件,不符合条件的行,要进行对应索引数据删除处理。
8.根据权利要求7所述的一种数据库函数索引实现方法,其特征在于,在步骤S3中,在匹配投影列和索引列后,增加匹配函数,
如果函数匹配符合规则,则通过computeScanCost进行cbo的变动,最终由cbo选择函数索引,完成对索引的选择,之后直接读取索引中的数据无需进行计算。
9.根据权利要求8所述的一种数据库函数索引实现方法,其特征在于,column_name是带有表中列的函数,当select表时where条件左值为函数索引的函数时,触发索引。
10.一种数据库函数索引实现装置,其特征在于,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至9中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310956793.3A CN117131042A (zh) | 2023-08-01 | 2023-08-01 | 一种数据库函数索引实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310956793.3A CN117131042A (zh) | 2023-08-01 | 2023-08-01 | 一种数据库函数索引实现方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117131042A true CN117131042A (zh) | 2023-11-28 |
Family
ID=88861893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310956793.3A Pending CN117131042A (zh) | 2023-08-01 | 2023-08-01 | 一种数据库函数索引实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117131042A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462592A (zh) * | 2014-03-28 | 2017-02-22 | 华为技术有限公司 | 优化对索引的多版本支持的系统和方法 |
US20180300350A1 (en) * | 2017-04-18 | 2018-10-18 | Microsoft Technology Licensing, Llc | File table index aggregate statistics |
CN109918472A (zh) * | 2019-02-27 | 2019-06-21 | 北京百度网讯科技有限公司 | 存储和查询数据的方法、装置、设备和介质 |
CN114461675A (zh) * | 2022-02-14 | 2022-05-10 | 山东浪潮科学研究院有限公司 | 基于kv存储的部分索引实现方法及系统 |
-
2023
- 2023-08-01 CN CN202310956793.3A patent/CN117131042A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462592A (zh) * | 2014-03-28 | 2017-02-22 | 华为技术有限公司 | 优化对索引的多版本支持的系统和方法 |
US20180300350A1 (en) * | 2017-04-18 | 2018-10-18 | Microsoft Technology Licensing, Llc | File table index aggregate statistics |
CN109918472A (zh) * | 2019-02-27 | 2019-06-21 | 北京百度网讯科技有限公司 | 存储和查询数据的方法、装置、设备和介质 |
CN114461675A (zh) * | 2022-02-14 | 2022-05-10 | 山东浪潮科学研究院有限公司 | 基于kv存储的部分索引实现方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | PBiTree coding and efficient processing of containment joins | |
US7739251B2 (en) | Incremental maintenance of an XML index on binary XML data | |
EP1234258B1 (en) | System for managing rdbm fragmentations | |
US8903805B2 (en) | Method and system for performing query optimization using a hybrid execution plan | |
US8458191B2 (en) | Method and system to store RDF data in a relational store | |
US8495085B2 (en) | Supporting efficient partial update of hierarchically structured documents based on record storage | |
EP2601600B1 (en) | Incremental maintenance of immediate materialized views with outerjoins | |
US20230367781A1 (en) | Systems and methods for processing timeseries data | |
KR101549220B1 (ko) | 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조 | |
CN115840589A (zh) | 一种支持异构分布式数据库的发布方法 | |
Borodin et al. | Improving penalty function of R-tree over generalized index search tree possible way to advance performance of PostgreSQL cube extension | |
Wang et al. | Rencoder: A space-time efficient range filter with local encoder | |
Chen et al. | Mapping XML to a wide sparse table | |
CN114372174A (zh) | 一种xml文档分布式查询方法及系统 | |
CN117131042A (zh) | 一种数据库函数索引实现方法及装置 | |
de Castro Lima et al. | Multidimensional cyclic graph approach: representing a data cube without common sub-graphs | |
CN117290377A (zh) | 一种关系型数据库间sql语句的转换方法以及装置 | |
CN114461675A (zh) | 基于kv存储的部分索引实现方法及系统 | |
Choi et al. | Updating recursive XML views of relations | |
CN114925142A (zh) | 一种orm框架的多类型数据库兼容方法、装置、设备及介质 | |
KR102351846B1 (ko) | 분산형 데이터베이스상의 인덱스 병합을 활용한 질의 최적화 방법 | |
CN113742307A (zh) | 一种基于值日志系统的二级索引的存储和查询方法及系统 | |
Xiao et al. | Branch code: A labeling scheme for efficient query answering on trees | |
Hadzic et al. | U3-Mning Unordered Embedded Subtrees Using TMG Candidate Generation | |
US20230367752A1 (en) | Systems and methods for processing timeseries data |
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 |