CN117216092A - 一种优化tdsql脚本的方法、装置、设备及可读存储介质 - Google Patents
一种优化tdsql脚本的方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN117216092A CN117216092A CN202311191670.1A CN202311191670A CN117216092A CN 117216092 A CN117216092 A CN 117216092A CN 202311191670 A CN202311191670 A CN 202311191670A CN 117216092 A CN117216092 A CN 117216092A
- Authority
- CN
- China
- Prior art keywords
- tdsql
- script
- query statement
- optimization
- optimizing
- 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
- 238000013515 script Methods 0.000 title claims abstract description 186
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000005457 optimization Methods 0.000 claims abstract description 103
- 238000012216 screening Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 7
- 230000000007 visual effect Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000000605 extraction Methods 0.000 description 4
- 230000000593 degrading effect Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种优化TDSQL脚本的方法、装置、设备及可读存储介质,可应用于大数据领域或金融领域,该方法包括:获取用户端发送的TDSQL脚本;解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句;判断查询语句是否存在笛卡尔积;当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果;根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本;从而优化了TDSQL脚本的笛卡尔积问题,提高了查询性能。
Description
技术领域
本申请涉及大数据领域及金融领域,尤其涉及一种优化TDSQL脚本的方法、装置、设备及可读存储介质。
背景技术
TDSQL是一种可以支持大规模的数据存储和查询的分布式数据库,用来操作TDSQL数据库的脚本文件称为TDSQL脚本,TDSQL脚本可以编写复杂的查询语句实现从TDSQL数据库中获取所需的数据。目前,TDSQL脚本中可能存在一种低效的查询操作,叫做笛卡尔积。笛卡尔积是指两个或多个表之间进行无条件的连接操作,即将一个表中的每一行与另一个表中的每一行进行组合,得到一个新的表。基于此,笛卡尔积可能会产生大量的中间结果,消耗大量的计算资源和时间,从而降低了查询性能。例如,如果数据表A有100行,数据表B有200行,那么数据表A和数据表B之间的笛卡尔积就会产生200万行的结果。因此,如何解决笛卡尔积带来的查询性能下降问题成为了亟须解决的问题。
发明内容
有鉴于此,本申请提供了一种优化TDSQL脚本的方法、装置、设备及可读存储介质,用以优化TDSQL脚本的笛卡尔积问题,以提高查询性能,其技术方案如下:
本申请第一方面提供了一种优化TDSQL脚本的方法,该方法包括:
获取用户端发送的TDSQL脚本;
解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句;
判断查询语句是否存在笛卡尔积;
当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果;
根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本。
在本申请第一方面的一些实现方式中,解析TDSQL脚本,包括:
通过语法解析器生成TDSQL脚本的抽象语法树;
通过抽象语法树提取表信息以及查询语句。
在本申请第一方面的一些实现方式中,优化结果包括:限制条件优化结果,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据表信息对查询语句进行限制条件优化,并生成限制条件优化结果,限制条件优化结果用于指示在查询语句中添加以下至少一种限制条件:关联条件、筛选条件、排序条件以及分类条件。
在本申请第一方面的一些实现方式中,根据优化结果改写TDSQL脚本包括:
根据限制条件优化结果在TDSQL脚本中的查询语句添加脚本限制条件。
在本申请第一方面的一些实现方式中,优化结果包括:表连接顺序优化结果,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据表信息对查询语句进行表连接顺序优化,并生成表连接顺序优化结果,表连接顺序优化结果用于指示修改查询语句中的表连接顺序。
在本申请第一方面的一些实现方式中,根据优化结果改写TDSQL脚本,包括:
根据表连接顺序优化结果修改TDSQL脚本中的查询语句的表连接顺序。
在本申请第一方面的一些实现方式中,该方法还包括:
执行优化后的TDSQL脚本,并将执行优化后的TDSQL脚本得到的执行结果发送至用户端。
本申请第二方面提供了一种优化TDSQL脚本的装置,该装置包括:
获取模块,用于获取用户端发送的TDSQL脚本;
解析模块,用于解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句;
判断模块,用于判断查询语句是否存在笛卡尔积;
优化模块,用于当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果;
改写模块,用于根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本。
本申请第三方面提供了一种优化TDSQL脚本的设备,该设备包括:处理器和存储器;
处理器,用于执行存储器中存储的程序,运行如本申请第一方面所提供的方法。
本申请第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,其中,计算机程序被处理器执行时实现本申请第一方面所提供的方法。
经由上述方案可知,在本申请所提供的技术方案中,获取用户端发送的TDSQL脚本;解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句;判断查询语句是否存在笛卡尔积;当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果;根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本;从而实现了对于TDSQL脚本的笛卡尔积操作的优化,降低了执行结果的结果集数量,提高了执行TDSQL脚本进行查询的查询性能。
附图说明
图1为本申请实施例提供的一种优化TDSQL脚本的方法的流程示意图;
图2为本申请实施例提供的又一种优化TDSQL脚本的方法的流程示意图;
图3为本申请实施例提供的一种优化TDSQL脚本的装置的结构示意图;
图4为本申请实施例提供的一种优化TDSQL脚本的设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
正如背景技术中所说的,笛卡尔积可能会产生大量的中间结果,消耗大量的计算资源和时间,从而降低了查询性能。有鉴于此,参见图1所示,本申请实施例提供了一种优化TDSQL脚本的方法,该方法可应用于数据库的服务器、数据库的操作系统或数据库的管理系统中,以优化TDSQL脚本的笛卡尔积问题,提高查询性能,具体包括以下步骤:
S101:获取用户端发送的TDSQL脚本。
在本申请实施例中,用户端指的是用户使用终端设备,可以是电脑、手机、平板等;TDSQL(Tencent Distributed SQL)脚本是一种用于对分布式关系型数据库TDSQL进行数据查询和管理的脚本语言,本申请中的TDSQL脚本通过从用户端接收用户输入或上传的TDSQL脚本得到。
可选地,用户可以通过可视化界面或应用程序接口输入或上传脚本,例如用户可以在一个可视化界面中输入或编辑TDSQL脚本,并点击发送按钮,将TDSQL脚本发送至执行本申请所提供方法的服务器;又例如,用户可通过调用应用程序接口(ApplicationProgramming Interface,API),又称为应用编程接口,将TDSQL脚本作为参数传递给服务器端。
S102:解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句。
查询语句指的是脚本中用来从数据库中获取数据的指令,其中包含了例如select、from、where等命令;表信息指的是数据库中数据表的信息,例如表名、字段名、字段类型等。
在本申请实施例中,可以通过Java语言编写解析器对TDSQL脚本进行解析,以提取其中的查询语句以及表信息。具体的实现效果可以是,假设用户想要查询两个表A和B之间的关系,其中表A存储了员工的基本信息,表B存储了员工的工资信息。并基于其查询需求上传了TDSQL脚本,从TDSQL脚本中提取到的信息可以例如:
查询语句:
select A.id,A.name,B.salary from A,B;
表信息:
表A:名称为A,有三列,分别为id、name、age,数据类型分别为int、string、int。
表B:名称为B,有三列,分别为id、gender、salary,数据类型分别为int、string、int。
S103:判断查询语句是否存在笛卡尔积。
笛卡尔积是指两个或多个表进行连接查询时,没有指定连接条件而产生所有可能的组合,所带来的影响是导致查询结果过大,浪费计算机资源,降低查询性能。例如,如果数据表A有3条记录,数据表B有4条记录,那么A和B的笛卡尔积就会有3×4=12条记录,如果表A和表B都有1000条记录,那么笛卡尔积就会有1000×1000=100万条记录。
在本申请所提供实施例中,TDSQL脚本是否存在笛卡尔积的判断可以采用如下方式:
由于笛卡尔积是一种无条件的连接操作,如果两个或多个表之间没有任何表连接条件。例如,在“SELECT A.id,B.name FROM A,B”这个查询语句中,表A和表B之间没有任何关系,则可以确认该查询语句存在笛卡尔积操作。
如果两个或多个表之间有部分的表连接条件,但不涉及所有参与连接的表,也会存在笛卡尔积操作。例如,在脚本包含的“select A.id,B.name,C.address from A,B,Cwhere A.id=B.id ANDB.cid=C.cid”查询语句中,表A和表B之间有一个共同的字段id,表B和表C之间有一个共同的字段cid,也就是两个等值连接关系。但表A和表C之间没有任何关系,则也会产生笛卡尔积。
如果两个或多个表之间有完全的表连接条件,则可以认定为不会产生笛卡尔积。例如,在“SELECT A.id,B.name FROM A,BWHERE A.id=B.id”这个查询语句中,表A和表B之间有一个完全关系,也就是一个等值连接关系,那么就不会产生笛卡尔积。
S104:当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果。
笛卡尔积优化是指为TDSQL脚本提供优化的修改策略,以减少或避免笛卡尔积的发生,优化结果可以指的是为TDSQL脚本提供的修改策略,目的在于提高执行TDSQL脚本的提高查询性能。
在本申请实施例的一些实现方式中,优化结果包括:限制条件优化结果和/或表连接顺序优化结果。其中,限制条件优化结果指的是在脚本中的查询语句增加限制条件的策略,用于过滤掉不需要的数据;表连接顺序优化结果指的是修改脚本中查询语句的表连接顺序的策略,用于减少后续连接操作的数据量。
S105:根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本。
改写TDSQL脚本是指根据优化结果,对原始的TDSQL脚本进行修改或重写,以得到优化后的TDSQL脚本。其中,修改是指在原始的TDSQL脚本中的查询语句中添加、删除或替换一些元素,例如添加限制条件等,重写是指用一个包含全新的查询语句的TDSQL脚本来替代原始的TDSQL脚本。本申请中,优化后的TDSQL脚本仍然使用SQL语言编写,但是相比于优化前的TDSQL脚本,已经避免或减少了在后续执行中遇到的笛卡尔积问题。
在本申请实施例中,通过自动化的方式判断笛卡尔积和改写TDSQL脚本,无需人工干预,从而实现自动优化TDSQL脚本中的笛卡尔积问题,减少了人工操作的时间和资源消耗,同时避免了由于人为因素引入的错误和主观性。
在图1所示的流程中,通过获取、解析、判断、优化、改写和执行TDSQL脚本,实现了对TDSQL脚本中的笛卡尔积问题的优化查询,提高了查询性能和资源利用率。具体地,通过获取用户端发送的TDSQL脚本,实现与用户端的交互,获取到了用户输入或上传的查询语句;通过解析TDSQL脚本,实现了对查询语句和表信息的提取;通过判断查询语句是否存在笛卡尔积,实现对脚本笛卡尔积的识别;通过根据表信息对查询语句进行笛卡尔积优化,并生成优化结果,实现了对查询语句的改进,生成优化结果作为对TDSQL脚本的优化方案,用于避免或减少笛卡尔积操作;通过根据优化结果改写TDSQL脚本得到优化后的TDSQL脚本,实现对TDSQL脚本的修改或重写,以得到更具查询效率的TDSQL脚本;通过执行优化后的TDSQL脚本并将执行结果发送至用户端,实现使用更具查询效率的优化后的TDSQL脚本进行查询。
参见图2所示,图2为本申请提供的又一种优化TDSQL脚本的方法,在图1所示流程的基础上,具体包括以下步骤:
S201:获取用户端发送的TDSQL脚本。
在本申请实施例中,S201的具体实施方式与S101相同,在此不作赘述
S202:通过语法解析器生成TDSQL脚本的抽象语法树。
在本申请实施例中,抽象语法树(Abstract Syntax Tree,AST)是指一种用于标识TDSQL脚本的语法结构与语义的树形结构,在该树形结构中包括了多个节点,每个节点可以用来表示一个语法元素,例如关键字、运算符、变量等。
在本申请实施例中,抽象语法树的生成是通过语法解析器实现的,也就是说语法解析器可以用于对TDSQL脚本进行语法分析,将其转换为一个抽象语法树。该语法解析器可以是一种计算器程序,可以实现将TDSQL脚本中的代码按照一定的规则分割成词法单元,并根据语法规则生成抽象语法树。
在此假设语法解析器生成的TDSQL脚本的抽象语法树包括以下节点:
指查询(Query)类型的节点,用于表示整个TDSQL脚本。
选择(Select)类型的节点,用于表示从表A和表B中选择所有列。
星号(*)类型的节点,用于表示选择所有列。
从(From)类型的节点,表示指定数据表。
逗号(,)类型的节点,表示连接两个数据表。
标识符(Identifier)类型的节点,值为A,用于表示数据表A。
标识符类型的节点,值为B,用于表示数据表B。
S203:通过抽象语法树提取TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句。
在本申请实施例中,可以通过遍历语法树来实现表信息和查询语句的提取,具体地,可以参见下述规则进行提取:当遇到查询类型的节点时,提取其子节点作为查询语句;当遇到选择类型的节点时,提取选择类型的子节点作为选择列;当遇到从类型的节点时,提取从类型的子节点作为数据源;当遇到逗号类型的节点时,提取逗号类型的子节点作为连接表;当遇到标识符类型的节点时,提取节点的值作为表名或列名;当遇到其他类型的节点时,忽略或按照相应的语法规则处理。基于上述节点的组合,可以得到一个查询语句,例如组合得到下述查询语句:
select*from A,B;
之后,可以通过上述节点确定TDSQL脚本中的查询语句指示连接的数据表,例如,通过标识符类型的节点确定指示连接的数据表,之后进一步提取表信息,例如表名、字段名、字段类型等,在此,假设提取到以下表信息:
数据表A:表名为A,字段名为id和name,分别为id、name、age,数据类型分别为int、string、int;
数据表B:表名为B,分别为id、gender、salary,数据类型分别为int、string、int。
S204:判断查询语句是否存在笛卡尔积,若是,执行S205,若否,则结束对TDSQL脚本进行笛卡尔积优化。
在本申请实施例中,判断TDSQL脚本中的查询语句是否存在笛卡尔积的方式,可参见S103中的具体实施方式,本申请在此不作赘述。
S205:根据表信息对查询语句进行限制条件优化,并生成限制条件优化结果,限制条件优化结果用于指示在查询语句中添加以下至少一种限制条件:关联条件、筛选条件、排序条件以及分类条件。
在本申请实施例中,限制条件优化是指在查询语句的连接操作中添加限制条件,使得查询语句连接相关或满足条件的行,从而减少不必要的匹配和输出,减少笛卡尔积的发生。
本申请的添加的限制条件为以下至少一种限制条件:关联条件、筛选条件、排序条件以及分类条件。其中,关联条件用于指定两个表之间的连接方式,例如等值连接、非等值连接等;筛选条件用于指定从数据表中选择哪些行,例如根据某些列的值、大小、范围等进行筛选;排序条件用于指定对查询结果进行排序的方式,例如根据某些列的值进行升序、降序等排序;分类条件用于指定对查询结果进行分组的方式,例如根据某些列的值进行分组。
在本申请实施例中,可以通过编写优化算法实现表信息实现上述限制条件的优化,解决涉及多个表的连接查询中的笛卡尔积问题,通过优化算法生成合适的优化方案,避免笛卡尔积的发生,提高查询效率,这样可以更好地应对复杂查询,提升数据库的整体性能。例如采用下述规则进行优化算法的编写,如果查询语句中没有指定任何关联条件,尝试添加等值连接或范围连接的关联条件,使得只连接具有相同或相近值的行;如果查询语句中指定了非等值连接的关联条件,尝试修改为等值连接或范围连接的关联条件,进而减少不相关的行;如果查询语句中没有指定任何筛选条件,尝试添加筛选条件,使得只选择满足某些特征或需求的行;如果查询语句中指定了过大的筛选条件,尝试修改为适当的筛选条件,以减少查询结果的数据;如果查询语句中没有指定任何排序条件,尝试添加排序条件,使得对查询结果进行有序的展示;如果查询语句中没有指定任何分类条件,尝试添加分类条件,使得对查询结果进行分组。需要说明的是,尝试添加的限制条件均是需要基于表信息进行添加。可以要理解的是,如果没有表信息,则无法不知道查询语句指示连接的数据表中包括哪些信息,而无法进行限制条件的添加。
需要说明的是,本申请实施里的优化算法的优化规则是可定制化的,能够根据用户的具体需求进行个性化的优化,以能够充分满足用户的不同需求。
沿用S203中举例的表信息以及查询语句继续进行说明,例如可以根据表信息对查询语句进行如下限制条件的优化:
1、添加关联条件和筛选条件,指示将原始查询语句修改为:
SELECT*FROM A,B WHERE A.i d=B.i d AND A.age>20;
指示在原始查询语句中添加一个等值连接的关联条件和一个筛选条件。关联条件使得只连接具有相同id的行,筛选条件使得只选择age大于20的行,由此避免笛卡尔积操作,还能进一步减少中间结果。
2、添加排序条件和分类条件,指示将原始查询语句修改为:
SELECT A.name,B.gender,SUM(B.salary)FROM A,B WHERE A.id=B.id GROUPBY A.name,B.gender ORDER BY SUM(B.salary)DESC;指示在原始查询语句中添加一个排序条件和一个分类条件。排序条件使得对查询结果按照薪资salary的总和进行降序排序,分类条件使得对查询结果按照名称name和性别gender进行分组和聚合,由此可以避免笛卡尔积操作,还能提高查询结果的可读性。
S206:根据表信息对查询语句进行表连接顺序优化,以得到表连接顺序优化结果,表连接顺序优化结果用于指示修改查询语句中的表连接顺序。
在本申请实施例中,表连接顺序是指在查询语句中指定多个表进行连接时,各个表之间的连接顺序;表连接顺序优化是指修改查询语句的表连接顺序,进而减少中间结果的大小,提高查询效率。
在本申请实施例中,可以通过编写优化算法实现表信息实现上述表连接顺序的优化,例如采用下述规则进行优化算法的编写:先连接有限制条件的数据表,再连接无限制条件的数据表;先连接数据量小的表,再连接数据量大的数据表;先连接有索引的列的数据表,再连接无索引的列的数据表;先连接有关联性的列的数据表,再连接无关联性的列的数据表。需要说明的是,数据表的数据量大小、有无索引的列、有无关联性的列等都是需要基于表信息进行获取的,可以理解的是,如果没有表信息,则无法进一步知道某数据表的数据量大小等信息,也就无法进一步基于上述规则进行表连接顺序的优化。
S207:根据限制条件优化结果在TDSQL脚本的查询语句添加限制条件,根据表连接顺序优化结果修改TDSQL脚本的查询语句的表连接顺序,以得到优化后的TDSQL脚本。
在本申请实施例的一些实现方式中,可以对查询语句进行限制条件优化以及表连接顺序优化,也可以仅进行限制条件的优化或表连接顺序优化,相应的,在S204判断TDSQL脚本存在笛卡尔积操作的情况下,执行S205或S206,之后直接执行S207。此时,S207得到的优化后的TDSQL脚本只经过表连接顺序或限制条件的优化。整体上来讲,在本申请实施例中,如果优化结果中有限制条件优化结果,则在TDSQL脚本中的查询语句中添加相应的限制条件。如果优化结果中有表连接顺序优化结果,则在TDSQL脚本的查询语句中修改相应的表连接顺序;如果优化结果中同时有限制条件优化结果和表连接顺序优化结果,则在TDSQL脚本的查询语句中同时进行以上两种改写。
根据优化结果对TDSQL脚本进行修改得到优化后的TDSQL脚本,优化后的TDSQL脚本可以避免或减少笛卡尔积操作,进而提高查询性能,具体来说,通过限制条件优化结果自动在TDSQL脚本中查询语句的添加限制条件,从而实现自动地过滤掉不需要的结果数据,减少了笛卡尔积;通过表连接顺序优化结果自动调整TDSQL脚本中查询语句的表连接顺序,从而实现自动地减少脚本后续执行时的中间结果数据,降低了笛卡尔积。此外,提供了动态调整和优化查询语句的能力。通过表信息分析查询语句和数据表的关系,生成相应的优化方案,并自动生成优化后的查询语句,这样可以适应变化的查询规模和数据分布,提高查询性能。
S208:执行优化后的TDSQL脚本,并将执行优化后的TDSQL脚本得到的执行结果发送至用户端。
执行优化后的TDSQL脚本是指通过能够执行TDSQL脚本的执行引擎执行优化后的TDSQL脚本,执行结果是指查询操作得到的数据集合,它可以以表格、图形、文本等形式展示,在本申请实施例的一些实现方式中。TDSQL脚本是用户端通过可视化界面或接口发送的,将执行优化后的TDSQL脚本得到的执行结果是通过可视化界面或接口发送至用户端的。例如,在为用户端提供的可视化界面中显示执行结果;又例如,通过调用应用程序接口,将执行结果作为参数传递给用户端。通过可视化界面或接口发送TDSQL脚本,使得用户可以通过点击、拖拽、输入等操作来构建自定义的查询语句。通过可视化界面或接口发送执行结果,以便于用户查看查询结果。
在图2所示的流程中,首先,通过语法解析器生成TDSQL脚本的抽象语法树,基于抽象语法树获取TDSQL脚本中的查询语句以及涉及到其所连接的数据表的表信息,实现了将TDSQL脚本转化为一种树形结构,以便于对TDSQL脚本的分析处理,并为后续的优化提供了必要的信息。
其次,通过根据表信息进行对查询语句的笛卡尔积优化,并生成限制条件优化结果,为查询语句提供了限制条件的优化方案,以避免或减少笛卡尔积,降低结果集的数据量,从而提高查询效率,并节省了计算机资源。
此外,通过根据表信息对查询语句进行表连接顺序的优化,并生成表连接顺序优化结果,为查询语句提供了表连接顺序的优化方案,以减少TDSQL脚本执行过程的中间结果数据的数量和大小,实现了提高表连接效率,并且进一步提高了查询性能。
参见图3所示,图3为本申请实施例提供的一种TDSQL脚本的优化查询装置的结构示意图,该装置具体包括以下模块:
获取模块301,用于获取用户端发送的TDSQL脚本;
解析模块302,用于解析TDSQL脚本,以得到TDSQL脚本指示连接的数据表的表信息以及TDSQL脚本中的查询语句;
判断模块303,用于判断查询语句是否存在笛卡尔积;
优化模块304,用于当查询语句存在笛卡尔积时,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果;
改写模块305,用于根据优化结果改写TDSQL脚本,以得到优化后的TDSQL脚本;
在本申请实施例的一些实现方式中,解析模块包括:
解析子模块,用于通过语法解析器生成TDSQL脚本的抽象语法树;
提取子模块,用于通过抽象语法树提取表信息以及查询语句。
在本申请实施例的一些实现方式中,优化结果包括:限制条件优化结果,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据表信息对查询语句进行限制条件优化,并生成限制条件优化结果,限制条件优化结果用于指示在查询语句中添加以下至少一种限制条件:关联条件、筛选条件、排序条件以及分类条件。
在本申请实施例的一些实现方式中,根据优化结果改写TDSQL脚本包括:
根据限制条件优化结果在TDSQL脚本中的查询语句添加脚本限制条件。
在本申请实施例的一些实现方式中,优化结果包括:表连接顺序优化结果,根据表信息对查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据表信息对查询语句进行表连接顺序优化,并生成表连接顺序优化结果,表连接顺序优化结果用于指示修改查询语句中的表连接顺序。
在本申请实施例的一些实现方式中,根据优化结果改写TDSQL脚本,包括:
根据表连接顺序优化结果修改TDSQL脚本中的查询语句的表连接顺序。
在本申请实施例的一些实现方式中,该装置还包括:
执行模块,用于执行优化后的TDSQL脚本,并将执行优化后的TDSQL脚本得到的执行结果发送至用户端。
本申请实施例还提供了一种优化TDSQL脚本的设备,请参阅图4,示出了优化TDSQL脚本的设备的结构示意图,该设备包括:存储器401、处理器402;
其中,存储器401用于存储程序;
处理器402用于执行存储器中的程序,以运行如图1至图2所示流程所示的一种优化TDSQL脚本的方法。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,计算机程序被处理器执行时实现如图1至图2所示流程所提供的一种优化TDSQL脚本的方法。
需要说明的是,本申请实施例提供的一种优化TDSQL脚本的方法、装置、设备及可读存储介质可应用于大数据领域或金融领域,需要说明的是,上述仅为示例,并不对本申请提供的一种优化TDSQL脚本的方法、装置、设备及可读存储介质的应用领域进行限定。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种优化TDSQL脚本的方法,其特征在于,所述方法包括:
获取用户端发送的TDSQL脚本;
解析所述TDSQL脚本,以得到所述TDSQL脚本指示连接的数据表的表信息以及所述TDSQL脚本中的查询语句;
判断所述查询语句是否存在笛卡尔积;
当所述查询语句存在所述笛卡尔积时,根据所述表信息对所述查询语句进行笛卡尔积优化,并生成优化结果;
根据所述优化结果改写所述TDSQL脚本,以得到优化后的TDSQL脚本。
2.根据权利要求1所述的方法,其特征在于,所述解析所述TDSQL脚本,包括:
通过语法解析器生成所述TDSQL脚本的抽象语法树;
通过所述抽象语法树提取所述表信息以及所述查询语句。
3.根据权利要求1所述的方法,其特征在于,所述优化结果包括:限制条件优化结果,所述根据所述表信息对所述查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据所述表信息对所述查询语句进行限制条件优化,并生成所述限制条件优化结果,所述限制条件优化结果用于指示在所述查询语句中添加以下至少一种限制条件:关联条件、筛选条件、排序条件以及分类条件。
4.根据权利要求3所述的方法,其特征在于,所述根据所述优化结果改写所述TDSQL脚本,包括:
根据所述限制条件优化结果在所述TDSQL脚本中的查询语句添加所述脚本限制条件。
5.根据权利要求1所述的方法,其特征在于,所述优化结果包括:表连接顺序优化结果,所述根据所述表信息对所述查询语句进行笛卡尔积优化,并生成优化结果,包括:
根据所述表信息对所述查询语句进行表连接顺序优化,并生成所述表连接顺序优化结果,所述表连接顺序优化结果用于指示修改所述查询语句中的表连接顺序。
6.根据权利要求5所述的方法,其特征在于,所述根据所述优化结果改写所述TDSQL脚本,包括:
根据所述表连接顺序优化结果修改所述TDSQL脚本中的查询语句的所述表连接顺序。
7.根据权利要求1至6任意一项所述的方法,其特征在于,所述方法还包括:
执行所述优化后的TDSQL脚本,并将执行所述优化后的TDSQL脚本得到的执行结果发送至所述用户端。
8.一种优化TDSQL脚本的装置,其特征在于,所述装置包括:
获取模块,用于获取用户端发送的TDSQL脚本;
解析模块,用于解析所述TDSQL脚本,以得到所述TDSQL脚本指示连接的数据表的表信息以及所述TDSQL脚本中的查询语句;
判断模块,用于判断所述查询语句是否存在笛卡尔积;
优化模块,用于当所述查询语句存在所述笛卡尔积时,根据所述表信息对所述查询语句进行笛卡尔积优化,并生成优化结果;
改写模块,用于根据所述优化结果改写所述TDSQL脚本,以得到优化后的TDSQL脚本。
9.一种优化TDSQL脚本的设备,其特征在于,所述设备包括:处理器和存储器;
所述处理器用于执行所述存储器中存储的程序,运行如权利要求1至7任意一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311191670.1A CN117216092A (zh) | 2023-09-15 | 2023-09-15 | 一种优化tdsql脚本的方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311191670.1A CN117216092A (zh) | 2023-09-15 | 2023-09-15 | 一种优化tdsql脚本的方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117216092A true CN117216092A (zh) | 2023-12-12 |
Family
ID=89038433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311191670.1A Pending CN117216092A (zh) | 2023-09-15 | 2023-09-15 | 一种优化tdsql脚本的方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117216092A (zh) |
-
2023
- 2023-09-15 CN CN202311191670.1A patent/CN117216092A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10162610B2 (en) | Method and apparatus for migration of application source code | |
US11620117B2 (en) | Systems and methods for code clustering analysis and transformation | |
US11188319B2 (en) | Systems and methods for entry point-based code analysis and transformation | |
JP2023182708A (ja) | 異種にプログラムされたデータ処理システムの自動依存性アナライザ | |
RU2383923C2 (ru) | Проектирование функций электронных таблиц для работы с таблицами данных | |
WO2020233330A1 (zh) | 批量测试方法、装置及计算机可读存储介质 | |
US11693912B2 (en) | Adapting database queries for data virtualization over combined database stores | |
EP3671526B1 (en) | Dependency graph based natural language processing | |
CN115061721A (zh) | 一种报表生成方法、装置、计算机设备及存储介质 | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
CN110427188B (zh) | 单测断言程序的配置方法、装置、设备及存储介质 | |
CN110673854A (zh) | Sas语言编译方法、装置、设备及可读存储介质 | |
CN109885585A (zh) | 支持存储过程、触发器与视图的分布式数据库系统和方法 | |
CN103077192A (zh) | 一种数据处理方法及其系统 | |
CN110704472A (zh) | 数据查询统计方法及装置 | |
CN107562429A (zh) | 一种基于编译规则的Android系统静态划分方法 | |
CN111078705A (zh) | 基于Spark平台建立数据索引方法及数据查询方法 | |
CN115469860B (zh) | 基于指令集的需求到软件领域模型的自动生成方法及系统 | |
CN111008011A (zh) | 一个面向电力平台应用开发的系统构建器 | |
CN116069330A (zh) | 中后台模板构建方法、装置和存储介质 | |
CN117216092A (zh) | 一种优化tdsql脚本的方法、装置、设备及可读存储介质 | |
US20050015264A1 (en) | Methods, systems, and a computer-readable medium for defining and evaluating business rules during runtime of a computer software application program | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN116756184B (zh) | 数据库实例处理方法、装置、设备、存储介质及程序产品 | |
CN113268425B (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 |