CN115587107A - 一种数据更新方法、装置、存储介质及设备 - Google Patents
一种数据更新方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN115587107A CN115587107A CN202211321073.1A CN202211321073A CN115587107A CN 115587107 A CN115587107 A CN 115587107A CN 202211321073 A CN202211321073 A CN 202211321073A CN 115587107 A CN115587107 A CN 115587107A
- Authority
- CN
- China
- Prior art keywords
- query
- sub
- queries
- group
- clause
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书公开一种数据更新方法、装置、存储介质及设备,通过获取待执行的更新语句,确定更新语句中包含的各子查询,并针对每个子查询,将该子查询拆分为操作子句以及来源子句,确定包含相同来源子句的子查询构成的查询组,以针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,以便于根据融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询,最后根据确定出的合并子查询,可重写更新语句,以执行重写后的更新语句进行数据更新。能够识别更新语句中来源子句相同的子查询,并合并得到合并子查询以重写更新语句,减少执行更新语句时执行子查询的数量,在能得到相同更新结果的前提下,提升更新效率。
Description
技术领域
本说明书涉及数据库技术领域,尤其涉及一种数据更新方法、装置、存储介质及设备。
背景技术
在数据库中,一条语句常常会涉及对多个字段的操作。例如,对于一条更新(update)语句,其中可能涉及对目标表中多个字段的更新。
目前,数据库中存在语句执行效率低,导致数据更新效率低的问题。为了提升数据库中数据更新效率,本说明书提供了一种数据更新方法。
发明内容
本说明书提供一种数据更新方法、装置、存储介质及设备,以至少部分解决现有技术中存在的问题。
本说明书采用下述技术方案:
本说明书提供了一种数据更新方法,包括:
获取待执行的更新语句,确定所述更新语句中包含的各子查询;
针对每个子查询,将该子查询拆分为操作子句以及来源子句;
根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组;
针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询;
根据确定出的合并子查询,重写所述更新语句;
执行重写后的更新语句以进行数据更新。
本说明书提供了一种数据更新装置,包括:
获取模块,用于获取待执行的更新语句,确定所述更新语句中包含的各子查询;
拆分模块,用于针对每个子查询,将该子查询拆分为操作子句以及来源子句;
构组模块,用于根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组;
融合模块,用于针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询;
重写模块,用于根据确定出的合并子查询,重写所述更新语句;
更新模块,用于执行重写后的更新语句以进行数据更新。
本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据更新方法。
本说明书提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据更新方法。
本说明书采用的上述至少一个技术方案能够达到以下有益效果:
在上述数据更新方法中,通过获取待执行的更新语句,确定更新语句中包含的各子查询,并针对每个子查询,将该子查询拆分为操作子句以及来源子句,根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组,以针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,以便于根据融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询,最后根据确定出的合并子查询,可重写更新语句,以执行重写后的更新语句进行数据更新。
从上述内容中可以看出,本说明书中提供的数据更新方法能够识别更新语句中来源子句相同的子查询,并合并得到合并子查询,以重写更新语句,减少执行更新语句时执行的子查询的数量,在能得到相同更新结果的前提下,提升更新效率。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:
图1为本说明书中一种数据更新方法的流程示意图;
图2为本说明书提供的一种更新语句的对比示意图;
图3为本说明书提供的一种数据更新装置的示意图;
图4为本说明书提供的一种电子设备的示意图。
具体实施方式
在对数据库中的数据进行更新时,通常通过更新语句进行更新。目前在通过执行更新语句对数据库进行更新时,尤其是在涉及对多个字段的更新时,数据库的更新用时久,更新效率低。
为了解决上述问题,本说明书提供了一种数据更新方法。
基于本说明书提供的数据更新方法,可对更新语句进行重写,优化更新语句的结构,达到减小执行更新语句的时间以减少执行更新语句进行数据更新的耗时,提升更新效率的效果。
在本说明书一个或多个实施例中,更新语句的格式为:update目标表set赋值语句;
目标表即数据库中被更新的数据表。update与set为更新语句中固定的关键字,目标表与赋值语句部分为可根据需求灵活设置的部分。其中的赋值语句是一个可以根据需求灵活设置的能够为目标表中待更新字段赋值的赋值语句块。
例如,假设更新语句为:update t1 set c1=5,c2=1,c3=(select avg(c1)fromt2),c4=(select sum(c2)from t2),c5=(select c2+c1 from t3 limit 1);
其中,t1表示目标表,set后的部分:c1=5,c2=1,c3=(select avg(c1)fromt2),c4=(select sum(c2)from t2),c5=(select c2+c1 from t3 limit 1)为赋值语句,分号表示一条update语句的结束。
c1、c2、c3、c4、c5为目标表中的5个待更新字段。c1=5、c2=1、c3=(select avg(c1)from t2)、c4=(select sum(c2)from t2)、c5=(select c2+c1 from t3 limit 1)为5个赋值表达式,同样是赋值语句中的赋值子句。
c1=5与c2=1为常规的,不包含子查询的赋值表达式。
在本说明书一个或多个实施例中,子查询可被拆分为操作子句以及来源子句。
以结构化查询语言(Structured Query Language,SQL)为例,子查询可为select……from……形式的,其中,select……部分即操作子句(也称select子句),from……即来源子句(也称from子句)。
在select子句的省略号部分可以填写源表中的字段(从源表查询的数据所在的字段),或者计算函数如求均值的函数avg()、求和函数sum()等。因此,操作子句可用于选择字段,得到字段下的值作为查询结果,或用于执行计算,得到计算结果作为查询结果。
from子句的省略号中可至少填写源表的名称,也可填写子查询等,用于确定查询数据的来源。
需要说明的是,本说明书中,子查询的形式不限制于select……from……形式,能够实现根据数据来源,确定字段下的值得到查询结果,或根据数据来源,进行计算后得到查询结果,即可。
其中,源表即更新数据的来源表。例如,根据数据表2更新数据表1时,数据表1即目标表,数据表2即源表。
在上述更新语句的例句中,存在3个包含子查询的赋值表达式,即c3=(selectavg(c1)from t2)、c4=(select sum(c2)from t2)、c5=(select c2+c1 from t3 limit1)。3个表达式包含的子查询依次分别为select avg(c1)from t2、select sum(c2)fromt2、select c2+c1 from t3 limit 1,t2、t3均为源表,子查询中的c1、c2表示源表中的字段。三个子查询分别表示:从t2中查询记录,计算字段c1的均值、从t2中查询记录,计算字段c2的和值、从t3中查询一条记录,计算字段c2与字段c1的和值。
目前,数据库在执行上述例句中的update语句时,需要分别获取待更新字段c1、c2、c3、c4、c5对应的更新值,即赋值运算符“=”右侧的数值或子查询的查询结果。对于包含子查询的赋值表达式,需要分别执行三个子查询,以得到各子查询的查询结果,即使部分子查询是对同一源表的查询,也需要分别执行。这会使得执行更新语句的效率低,导致数据库的更新效率低。
在本说明书提供的数据更新方法中,为了提高执行更新语句的效率,基于子查询的相似性,对包含相同的来源子句的子查询进行融合,合并为一个子查询后执行,如此,可通过执行一个子查询得到与分别执行多个子查询同样的结果,且用时更短,效率更高,以提升数据库的更新效率。
在一些场景下,一条更新语句可涉及大量的子查询,更新语句中出现相似子查询(即,包含相同来源子句的子查询)的概率更高,数量更大。本说明书提供的数据更新方法,可使得这种类型的更新语句的优化效果更好,对执行效率的提升更高。
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
以下结合附图,详细说明本说明书各实施例提供的技术方案。
图1为本说明书中一种数据更新方法的流程示意图,具体包括以下步骤:
S100:获取待执行的更新语句,确定所述更新语句中包含的各子查询。
该数据更新方法可由数据库执行。
首先,数据库可获取待执行的更新语句。为了对更新语句进行重写优化,该数据库还可确定更新语句中包含的各子查询。
由于子查询可存在的位置为更新语句包含的赋值表达式中,因此,在确定更新语句包含的各子查询时,具体的,数据库可确定更新语句中的赋值语句,并从赋值语句中确定各赋值表达式。之后,则可从包含子查询的赋值表达式中,拆分得到子查询。
当然,由于更新语句中可能还存在不包含子查询的赋值表达式,因此该数据库可在从赋值语句中确定各赋值表达式后,先从中确定包含子查询的各赋值表达式,然后再拆分得到子查询。
S102:针对每个子查询,将该子查询拆分为操作子句以及来源子句。
如上所述,一个子查询可被拆分为操作子句与来源子句。而对更新语句进行优化,可先确定出其中包含相同的来源子句的子查询,以便于进行子查询的合并,得到新的子查询。
因此,确定出更新语句中的各子查询后,首先则可针对每个子查询,将该子查询拆分为操作子句以及来源子句。
S104:根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组。
由于具有相同来源子句的子查询所查询的数据来源是相同的,即,用于更新目标表的数据来源是相同的,便于合并执行,因此,可根据子查询包含的来源子句对各子查询进行分组,得到多个查询组。使得一个查询组中包含的各子查询皆为包含相同的来源子句的相似的子查询。
于是,在本说明书一个或多个实施例中,该数据库可根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组。
S106:针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询。
在确定出各查询组后,该数据库即可对每个查询组中的子查询进行合并优化,将一个查询组中多个子查询合并为一个子查询,使得在执行优化后的更新语句时,可通过执行合并得到的一个子查询,消耗执行一个子查询的时间,得到原本的多个子查询对应的查询结果,以提升更新效率。
由于一个查询组中,来源子句是相同的,而操作子句由于多样化且复杂,通常是不同的,因此,在一个查询组中各子查询的操作子句不同时,可对操作子句进行融合,得到新的操作子句。
于是,在确定出各查询组后,该数据库可针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句。之后,可根据该融合操作子句,以及该查询组对应的来源子句,确定该查询组对应的合并子查询。该合并子查询为将多个子查询融合得到的一个新的子查询。
需要说明的是,该查询组包含多个相同的来源子句,可从中确定一个来源子句作为该查询组对应的来源子句,用于与融合操作子句得到合并子查询。
并且,在融合时,要保证合并子查询的格式正确,即,确保得到的合并子查询为融合操作子句来源子句的顺序,而非来源子句融合操作子句的顺序。当然,在得到重写的更新语句的过程中的每个环节,皆需保证更新语句的语法、格式正确性。
需要说明的是,上述步骤S100~步骤S106具体可由数据库中的优化器执行。
S108:根据确定出的合并子查询,重写所述更新语句。
在确定出各查询组对应的合并子查询后,该数据库则可根据各合并子查询,重写更新语句,得到优化后的更新语句。
S110:执行重写后的更新语句以进行数据更新。
在重写更新语句后,该数据库即可执行重写后的更新语句。
需要说明的是,通过对更新语句进行重写优化,得到重写后的更新语句,改变的仅仅是更新语句非固定部分的形式和结构,优化的为执行更新语句的效率,执行重写后的更新语句与执行重写前的更新语句得到的更新结果相同,不会改变。即,本说明书提供的该数据更新方法实现的是对语句执行效率以及更新效率的优化。
基于图1所示的数据更新方法,通过获取待执行的更新语句,确定更新语句中包含的各子查询,并针对每个子查询,将该子查询拆分为操作子句以及来源子句,根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组,以针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,以便于根据融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询,最后根据确定出的合并子查询,可重写更新语句,以执行重写后的更新语句进行数据更新。
从上述方法中可以看出,本方法能够识别更新语句中包含相同来源子句的子查询,并合并得到合并子查询,以重写更新语句,减少执行更新语句时执行的子查询的数量,在能得到相同更新结果的前提下,提升更新效率。
另外,在步骤S104中,在根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组时,具体的,该数据库可将任一子查询,作为目标子查询,并遍历未分组的其他子查询,根据与该目标子查询的来源子句一致的其他子查询,确定查询组。
之后,该数据库可判断是否有未分组,且未作为目标子查询的子查询。
若是,则可从未分组,且未作为目标子查询的子查询中,确定目标子查询,并继续遍历未分组的其他子查询,确定新的查询组,直至不存在未作为目标子查询的子查询为止。
若否,则可确定得到该更新语句的各查询组。
在确定目标子查询时,可随机确定,或者,也可按照出现在更新语句中的顺序确定。
在本说明书一个或多个实施例中,为了避免一个查询组中包含的子查询过多,导致需要将大量的子查询合并为一个合并子查询,该数据库还可对一个查询组包含的子查询的数量进行控制。
因此,该数据库可在确定包含的来源子句相同的各子查询,作为一组待定子查询,并在该组待定子查询的数量大于预设的数量阈值时,根据该组待定子查询中的部分子查询,确定一个查询组,并根据另一部分子查询,确定另一个查询组。
即,可将包含相同来源子句的若干子查询,分为两个查询组,例如,当包含相同来源子句的子查询的数量为双数时,可均分为两个查询组,当包含相同来源子句的子查询的数量为单数时,可使得两个查询组的包含的子查询的数量差1。
在本说明书一个或多个实施例中,操作子句可由操作标识符与操作字段构成。例如,对于子查询(select c1+10from t3 limit 1)中的操作子句select c1+10而言,select即操作标识符,除了操作标识符外剩余的部分:c1+10即操作字段。由于该操作字段中可仅包含字段,或者,也可包含函数等计算,因此,该操作字段还可成为操作字符串。
来源子句由来源标识符以及来源字符串构成。如,对于子查询(select c1+10fromt3 limit1)中的来源子句from t3 limit 1而言,from即来源标识符,除来源标识符外的部分即来源字符串:t3 limit 1。
在本说明书一个或多个实施例中,在步骤S106中,在对该查询组中各子查询的操作子句进行融合,得到融合操作子句时,具体的,该数据库可对该查询组中各子查询的操作字段拼接得到融合操作字段,并根据该操作标识符以及该融合操作字段,确定该查询组对应的融合操作子句。
之后便可根据融合操作子句,以及该查询组对应的来源子句,确定该查询组对应的合并子查询。
另外,在本说明书一个或多个实施例中,包含子查询的赋值表达式可由待更新字段、赋值运算符以及子查询构成。该赋值运算符为“=”。
在步骤S108中,根据确定出的合并子查询,重写更新语句时,具体的,该数据库可针对每个查询组,确定该查询组对应的各赋值表达式中的待更新字段,并根据确定出的各待更新字段,确定该查询组对应的待更新字段的向量。
之后,可根据该待更新字段的向量、该赋值运算符以及该查询组对应的合并子查询,确定该查询组对应的优化后的赋值表达式,以根据各查询组对应的优化后的赋值表达式,重写更新语句。
在本说明书一个或多个实施例中,在根据各查询组对应的优化后的赋值表达式,重写更新语句时,具体的,该数据库可针对每个查询组,确定更新语句中,该查询组对应的原始赋值表达式。之后,可将该更新语句中各查询组对应的原始赋值表达式删除,并替换为各查询组对应的优化后的赋值表达式,得到重写的更新语句。
以更新语句为:update t1 set c1=(select c1+10from t3 limit 1),c2=1,c3=(select avg(c1)from t2),c4=(select sum(c2)from t2),c5=(select c2+c1 fromt3 limit 1);为例对该数据库对更新语句进行重新优化的过程进行说明。
在获取到该更新语句后,该数据库则可确定更新语句中的赋值语句c1=(selectc1+10from t3 limit 1),c2=1,c3=(select avg(c1)from t2),c4=(select sum(c2)from t2),c5=(select c2+c1 from t3 limit 1);之后,可从赋值语句中确定5个赋值表达式:c1=(select c1+10from t3 limit 1)、c2=1,c3=(select avg(c1)from t2)、c4=(select sum(c2)from t2)、c5=(select c2+c1 from t3 limit 1)。之后,可确定包含子查询的赋值表达式,即,除c2=1外的赋值表达式。
然后,该数据库则可从包含子查询的赋值表达式中,拆分出子查询。则,对赋值表达式c1=(select c1+10from t3 limit 1)可拆分得到子查询(select c1+10from t3limit 1),对赋值表达式c3=(select avg(c1)from t2)可拆分得到子查询(select avg(c1)from t2),对赋值表达式c4=(select sum(c2)from t2)可拆分得到子查询(selectsum(c2)from t2),对赋值表达式c5=(select c2+c1 from t3 limit 1)可拆分得到子查询(select c2+c1 from t3 limit 1)。
之后,则可确定子查询间的相似关系,将包含相同来源子句的子查询划分至一个查询组中。由于(select c1+10from t3 limit 1)与(select c2+c1 from t3 limit 1)的来源子句相同,皆为from t3 limit 1,(select avg(c1)from t2)与(select sum(c2)fromt2)的来源子句相同,皆为from t2,因此(select c1+10from t3 limit 1)与(select c2+c1 from t3 limit 1)为相似的子查询,构成一个查询组(后续称为第一查询组),(selectavg(c1)from t2)与(select sum(c2)from t2)为相似的子查询,构成一个查询组(后续称为第二查询组)。
针对第一查询组,对该查询组中子查询的操作子句进行融合时,可得到融合操作子句select c1+10,c2+c1,其中c1+10,c2+c1即该查询组对应的融合操作字段。根据融合操作子句与该查询组的来源子句from t3 limit 1,可得到该查询组的合并子查询(selectc1+10,c2+c1from t3 limit 1),即,一个新的子查询。
对第二查询组中子查询的操作子句进行融合时,可得到融合操作子句select avg(c1),sum(c2),avg(c1),sum(c2)即该查询组对应的融合操作字段。根据该融合操作子句与该查询组的来源子句from t2,可得到该查询组对应的合并子查询(select avg(c1),sum(c2)from t2)。
进一步地,在根据各查询组对应的合并子查询,重写更新语句时,可确定第一查询组对应的子查询所属的赋值表达式c1=(select c1+10from t3 limit 1)中的待更新字段c1,以及赋值表达式c5=(select c2+c1 from t3 limit 1)中的待更新字段c5。以根据确定出的该查询组的待更新字段c1、c5,确定该查询组对应的待更新字段的向量(c1,c5)。并根据该向量(c1,c5)、赋值运算符“=”以及该该查询组的合并子查询(select c1+10,c2+c1from t3 limit 1),确定优化后的赋值语句(c1,c5)=(select c1+10,c2+c1 from t3limit 1)。
并且,可确定第二查询组对应的子查询所属的赋值表达式c3=(select avg(c1)from t2)中的待更新字段c3,以及赋值表达式c4=(select sum(c2)from t2)中的待更新字段c4。以根据确定出的该查询组的待更新字段c3、c4,确定该查询组对应的待更新字段的向量(c3,c4)。并根据该向量(c3,c4)、赋值运算符“=”以及该查询组的合并子查询(selectavg(c1),sum(c2)from t2),确定优化后的赋值语句(c3,c4)=(select avg(c1),sum(c2)from t2)。
之后,则可根据各查询组对应的优化后的赋值语句,重写更新语句。
在根据各查询组对应的优化后的赋值语句,重写更新语句时,数据库可确定第一查询组对应的原始赋值表达式:c1=(select c1+10from t3 limit 1)、c5=(select c2+c1 from t3 limit1),并将其从更新语句中删除,替换为该查询组的优化后的赋值表达式(c1,c5)=(select c1+10,c2+c1 from t3 limit 1)。
并确定第二查询组对应的原始赋值表达式:c3=(select avg(c1)from t2)、c4=(select sum(c2)from t2),将其从更新语句中删除后替换为第二查询组的优化后的赋值表达式(c3,c4)=(select avg(c1),sum(c2)from t2)。
之后,便可得到重写后的更新语句update t1 set(c1,c5)=(select c1+10,c2+c1 from t3limit 1),c2=1,(c3,c4)=(select avg(c1),sum(c2)from t2);
其中,由于上述示例中一个查询组对应两个原始赋值表达式,以第一查询组为例,两个原始赋值表达式分别位于更新语句中第一个赋值表达式以及最后一个赋值表达式,而优化后的赋值表达式只有一个。在替换时,可将两个原始赋值表达式删除后,将优化后的赋值表达式放置于原始赋值表达式中最靠前的位置,当然也可放置于最后的位置,本说明书在此不做限制。
由上述例句可见,基于重写优化前的查询语句在执行更新操作时需要分别执行四次子查询,而基于优化后的查询语句在执行更新操作时只需要执行两次子查询,大幅度减少了更新操作的计算量,有效提升了更新查询的性能。
在本说明书一个或多个实施例中,在将更新语句中各查询组对应的原始赋值表达式删除,并替换为各查询组对应的优化后的赋值表达式时,该数据库可针对每个查询组,确定该查询组对应的原始赋值表达式在更新语句中的位置。之后,可将更新语句中该查询组对应的原始赋值表达式删除,并从确定出的位置中,确定优先位置,以将该查询组对应的优化后的赋值表达式添加到该优先位置。
其中该优先位置可以是确定出的各位置中,最靠近更新语句句首的位置,或者也可以是最靠近句尾的位置,可根据需要设置。
另外,由于可能存在一个查询组中各子查询的操作子句也相同的情况。因此,在步骤S106中,在对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询时,具体还可当该查询组中各子查询相同时,将该查询组中任一子查询,作为该查询组对应的合并子查询。
为了方便理解,本说明书还提供了更新语句重写前后的对比图,如图2所示。
图2为本说明书提供的一种更新语句的对比示意图。如图,重写前的更新语句为Update t1 set c1=5,c2=(select avg(c1)from t2),c4=(select sum(c2)from t2);对该更新语句进行重写后,得到的重写后的更新语句为Update t1 set c1=5,(c2,c4)=(select avg(c1),sum(c2)from t2);
在重写前的更新语句中,Update与set为更新语句中的固定关键字。c1、c2、c4为目标表t1中的待更新字段,set后的部分:c1=5,c2=(select avg(c1)from t2),c4=(select sum(c2)from t2)为赋值语句,包括:c1=5、c2=(select avg(c1)from t2)、c4=(select sum(c2)from t2)三个赋值表达式。其中,赋值表达式c2=(select avg(c1)fromt2)包含子查询(select avg(c1)from t2),select为子查询的操作子句中的操作标识符,avg(c1)为操作字段,from t2为来源子句。赋值表达式c4=(select sum(c2)from t2)包含子查询(select sum(c2)from t2),同样,select为子查询的操作子句中的操作标识符,操作字段则为sum(c2),来源子句同样是from t2。即,两个子查询的数据来源皆为源表t2。
由重写后的更新语句可见,重写后的更新语句中的赋值语句更短,为c1=5,(c2,c4)=(select avg(c1),sum(c2)from t2)。重写后的更新语句与重写前的更新语句的区别在于赋值表达式c1=5之后的部分。重写后的更新语句中优化后的赋值表达式(c2,c4)=(select avg(c1),sum(c2)from t2)为,根据重写前的更新语句中两个包含子查询的赋值表达式融合得到的。(c2,c4)为优化后的赋值表达式中,待更新字段的向量。可见,优化后的赋值表达式仅包含一个子查询,即,合并子查询(select avg(c1),sum(c2)from t2)。该合并子查询由融合操作子句select avg(c1),sum(c2)与来源子句from t2组成,其中avg(c1),sum(c2)为融合操作字段。
需要说明的是,本说明书中对更新语句的英文书写形式仅为示意,并非限制,对于语句中的同一个字符串,如update,该字符串是大写或小写或首字母大写仅为书写的差别,并非对可执行的更新语句的限制,例如,图2所示的更新语句中,各字母可皆为大写。
以上为本说明书提供的一种数据更新方法,本说明书还提供了对应的数据更新装置,如图3所示。
图3为本说明书提供的一种数据更新装置示意图,装置包括:
获取模块200,用于获取待执行的更新语句,确定所述更新语句中包含的各子查询;
拆分模块201,用于针对每个子查询,将该子查询拆分为操作子句以及来源子句;
构组模块202,用于根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组;
融合模块203,用于针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询;
重写模块204,用于根据确定出的合并子查询,重写所述更新语句;
更新模块205,用于执行重写后的更新语句以进行数据更新。
可选地,所述获取模块200,还用于确定所述更新语句中的赋值语句,从所述赋值语句中确定各赋值表达式,从包含子查询的赋值表达式中,拆分得到子查询。
可选地,所述构组模块202,还用于将任一子查询,作为目标子查询,遍历未分组的其他子查询,根据与所述目标子查询的来源子句一致的其他子查询,确定查询组,判断是否有未分组,且未作为目标子查询的子查询,若是,则从未分组,且未作为目标子查询的子查询中,确定目标子查询,并继续遍历未分组的其他子查询,确定新的查询组,直至不存在未作为目标子查询的子查询为止,若否,则确定得到所述更新语句的各查询组。
可选地,所述操作子句由操作标识符与操作字段构成,所述融合模块203,用于对该查询组中各子查询的操作字段拼接得到融合操作字段,根据所述操作标识符以及所述融合操作字段,确定该查询组对应的融合操作子句。
可选地,包含子查询的赋值表达式由待更新字段、赋值运算符以及子查询构成,所述重写模块204,还用于针对每个查询组,确定该查询组对应的各赋值表达式中的待更新字段,根据确定出的各待更新字段,确定该查询组对应的待更新字段的向量,根据所述待更新字段的向量、所述赋值运算符以及该查询组对应的合并子查询,确定该查询组对应的优化后的赋值表达式,根据各查询组对应的优化后的赋值表达式,重写所述更新语句。
可选地,所述重写模块204,还用于针对每个查询组,确定所述更新语句中,该查询组对应的原始赋值表达式,将所述更新语句中各查询组对应的原始赋值表达式删除,并替换为各查询组对应的优化后的赋值表达式,得到重写的更新语句。
可选地,所述融合模块203,还用于当该查询组中各子查询相同时,将该查询组中任一子查询,作为该查询组对应的合并子查询。
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述数据更新方法。
本说明书还提供了图4所示的电子设备的示意结构图。如图4所述,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述数据更新方法。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (16)
1.一种数据更新方法,包括:
获取待执行的更新语句,确定所述更新语句中包含的各子查询;
针对每个子查询,将该子查询拆分为操作子句以及来源子句;
根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组;
针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询;
根据确定出的合并子查询,重写所述更新语句;
执行重写后的更新语句以进行数据更新。
2.如权利要求1所述的方法,确定所述更新语句中包含的各子查询,具体包括:
确定所述更新语句中的赋值语句;
从所述赋值语句中确定各赋值表达式;
从包含子查询的赋值表达式中,拆分得到子查询。
3.如权利要求1所述的方法,根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组,具体包括:
将任一子查询,作为目标子查询;
遍历未分组的其他子查询,根据与所述目标子查询的来源子句一致的其他子查询,确定查询组;
判断是否有未分组,且未作为目标子查询的子查询;
若是,则从未分组,且未作为目标子查询的子查询中,确定目标子查询,并继续遍历未分组的其他子查询,确定新的查询组,直至不存在未作为目标子查询的子查询为止;
若否,则确定得到所述更新语句的各查询组。
4.如权利要求1所述的方法,所述操作子句由操作标识符与操作字段构成;
对该查询组中各子查询的操作子句进行融合,得到融合操作子句,具体包括:
对该查询组中各子查询的操作字段拼接得到融合操作字段;
根据所述操作标识符以及所述融合操作字段,确定该查询组对应的融合操作子句。
5.如权利要求2所述的方法,包含子查询的赋值表达式由待更新字段、赋值运算符以及子查询构成;
根据确定出的合并子查询,重写所述更新语句,具体包括:
针对每个查询组,确定该查询组对应的各赋值表达式中的待更新字段;
根据确定出的各待更新字段,确定该查询组对应的待更新字段的向量;
根据所述待更新字段的向量、所述赋值运算符以及该查询组对应的合并子查询,确定该查询组对应的优化后的赋值表达式;
根据各查询组对应的优化后的赋值表达式,重写所述更新语句。
6.如权利要求5所述的方法,根据各查询组对应的优化后的赋值表达式,重写所述更新语句,具体包括:
针对每个查询组,确定所述更新语句中,该查询组对应的原始赋值表达式;
将所述更新语句中各查询组对应的原始赋值表达式删除,并替换为各查询组对应的优化后的赋值表达式,得到重写的更新语句。
7.如权利要求1所述的方法,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询,具体包括:
当该查询组中各子查询相同时,将该查询组中任一子查询,作为该查询组对应的合并子查询。
8.一种数据更新装置,包括:
获取模块,用于获取待执行的更新语句,确定所述更新语句中包含的各子查询;
拆分模块,用于针对每个子查询,将该子查询拆分为操作子句以及来源子句;
构组模块,用于根据各子查询的来源子句,确定包含相同来源子句的子查询构成的查询组;
融合模块,用于针对每个查询组,对该查询组中各子查询的操作子句进行融合,得到融合操作子句,根据所述融合操作子句以及该查询组对应的来源子句,确定该查询组对应的合并子查询;
重写模块,用于根据确定出的合并子查询,重写所述更新语句;
更新模块,用于执行重写后的更新语句以进行数据更新。
9.如权利要求8所述的装置,所述获取模块,还用于确定所述更新语句中的赋值语句,从所述赋值语句中确定各赋值表达式,从包含子查询的赋值表达式中,拆分得到子查询。
10.如权利要求8所述的装置,所述构组模块,还用于将任一子查询,作为目标子查询,遍历未分组的其他子查询,根据与所述目标子查询的来源子句一致的其他子查询,确定查询组,判断是否有未分组,且未作为目标子查询的子查询,若是,则从未分组,且未作为目标子查询的子查询中,确定目标子查询,并继续遍历未分组的其他子查询,确定新的查询组,直至不存在未作为目标子查询的子查询为止,若否,则确定得到所述更新语句的各查询组。
11.如权利要求8所述的装置,所述操作子句由操作标识符与操作字段构成;
所述融合模块,还用于对该查询组中各子查询的操作字段拼接得到融合操作字段,根据所述操作标识符以及所述融合操作字段,确定该查询组对应的融合操作子句。
12.如权利要求9所述的装置,包含子查询的赋值表达式由待更新字段、赋值运算符以及子查询构成;
所述重写模块,还用于针对每个查询组,确定该查询组对应的各赋值表达式中的待更新字段,根据确定出的各待更新字段,确定该查询组对应的待更新字段的向量,根据所述待更新字段的向量、所述赋值运算符以及该查询组对应的合并子查询,确定该查询组对应的优化后的赋值表达式,根据各查询组对应的优化后的赋值表达式,重写所述更新语句。
13.如权利要求12所述的装置,所述重写模块,还用于针对每个查询组,确定所述更新语句中,该查询组对应的原始赋值表达式,将所述更新语句中各查询组对应的原始赋值表达式删除,并替换为各查询组对应的优化后的赋值表达式,得到重写的更新语句。
14.如权利要求8所述的装置,所述融合模块,还用于当该查询组中各子查询相同时,将该查询组中任一子查询,作为该查询组对应的合并子查询。
15.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~7任一项所述的方法。
16.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述权利要求1~7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211321073.1A CN115587107A (zh) | 2022-10-26 | 2022-10-26 | 一种数据更新方法、装置、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211321073.1A CN115587107A (zh) | 2022-10-26 | 2022-10-26 | 一种数据更新方法、装置、存储介质及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115587107A true CN115587107A (zh) | 2023-01-10 |
Family
ID=84781978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211321073.1A Pending CN115587107A (zh) | 2022-10-26 | 2022-10-26 | 一种数据更新方法、装置、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115587107A (zh) |
-
2022
- 2022-10-26 CN CN202211321073.1A patent/CN115587107A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107526777B (zh) | 一种基于版本号对文件进行处理的方法及设备 | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US20190121819A1 (en) | Relational modeler and renderer for non-relational data | |
CN114880504B (zh) | 一种图数据的查询方法、装置以及设备 | |
CN110399359B (zh) | 一种数据回溯方法、装置及设备 | |
CN111797073A (zh) | 数据库管理方法、电子设备与计算机可读存储介质 | |
US20240256613A1 (en) | Data processing method and apparatus, readable storage medium, and electronic device | |
CN115934161A (zh) | 一种代码变更的影响分析方法、装置以及设备 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN116521705A (zh) | 一种数据查询方法、装置、存储介质及电子设备 | |
CN116644090B (zh) | 一种数据查询方法、装置、设备及介质 | |
US11080332B1 (en) | Flexible indexing for graph databases | |
WO2024078122A1 (zh) | 数据库表扫描的方法、装置以及设备 | |
CN116010419A (zh) | 一种创建唯一索引和优化逻辑删除的方法及装置 | |
CN116303625B (zh) | 一种数据查询的方法、装置、存储介质及电子设备 | |
CN115878654A (zh) | 一种数据查询的方法、装置、设备及存储介质 | |
CN110502551A (zh) | 数据读写方法、系统及架构组件 | |
CN115587107A (zh) | 一种数据更新方法、装置、存储介质及设备 | |
CN115391426A (zh) | 一种数据查询方法、装置、存储介质及电子设备 | |
CN108153799B (zh) | 数据库访问控制方法、装置和数据库系统 | |
CN116010345A (zh) | 一种实现流批一体数据湖的表服务方案的方法、装置及设备 | |
TWI748247B (zh) | 產生統計資訊的方法、系統以及電子設備 | |
CN109033201A (zh) | 一种文件差异数据的获取方法、装置及电子设备 | |
CN116521734A (zh) | 一种数据查询的方法、装置、介质及设备 | |
CN116756093B (zh) | 一种大对象存储、查询方法、装置、设备及介质 |
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 |