首页> 中国专利> 基于结构化查询语言SQL的查询方法、装置及存储介质

基于结构化查询语言SQL的查询方法、装置及存储介质

摘要

本申请公开了一种基于结构化查询语言SQL的查询方法、装置及存储介质。该方法包括:获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。通过本申请,解决了相关技术中由于在数据查询过程中,存在开发时间长,调整周期长,导致SQL的查询效率较低的问题。

著录项

  • 公开/公告号CN112506953A

    专利类型发明专利

  • 公开/公告日2021-03-16

    原文格式PDF

  • 申请/专利权人 中国邮政储蓄银行股份有限公司;

    申请/专利号CN202011447144.3

  • 发明设计人 刘程;陈震宇;刘国华;

    申请日2020-12-11

  • 分类号G06F16/242(20190101);G06F16/2453(20190101);

  • 代理机构11240 北京康信知识产权代理有限责任公司;

  • 代理人周春枚

  • 地址 100032 北京市西城区金融大街3号

  • 入库时间 2023-06-19 10:16:30

说明书

技术领域

本申请涉及数据查询领域,具体而言,涉及一种基于结构化查询语言SQL的查询方法、装置及存储介质。

背景技术

在数据分析和智能决策系统中,报表是最常见的,也是使用最广泛的应用形式。当用户访问报表时,系统直接连接数据库执行查询SQL,往往会出现聚合、表联表等耗时的操作,导致查询时间会比较长,用户体验差。

在现有的解决方案中,基于缓存的方案,把每次查询的结果缓存起来,减少数据库查询次数,从而节省数据返回时间,但缓存空间有限,同一张报表只要有一个因素变化,查询的结果就会变化,例如:查询条件变化,或者分页查询情况。报表依赖命中率,且未命中缓存数据,SQL的查询未得到改善。另外业界有时也会依靠人工来优化设计一些中间表,来优化查询SQL,存在开发时间长,调整周期长,效率低的问题。

针对相关技术中SQL的查询效率较低的问题,目前尚未提出有效的解决方案。

发明内容

本申请的主要目的在于提供一种基于结构化查询语言SQL的查询方法、装置及存储介质,以解决相关技术中由于在数据查询过程中,存在开发时间长,调整周期长,导致SQL的查询效率较低的问题。

为了实现上述目的,根据本申请的一个方面,提供了一种基于结构化查询语言SQL的查询方法。该方法包括:获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

进一步地,在判断中间表管理信息表中是否记录了与核心查询内容对应的中间表之前,方法还包括:获取预设时间内访问原表查询且查询时长超过阈值的查询记录;从查询记录中提取SQL内容;分别对每个SQL内容进行语法解析,提取每个SQL内容对应的核心查询内容和附加条件内容;基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表。

进一步地,基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表包括:依据每个SQL内容对应的核心查询内容创建对应的中间表;基于附加条件内容对创建的中间表添加索引。

进一步地,在创建每个SQL内容对应的中间表之后,方法还包括:将每个SQL内容对应的中间表的信息记录在中间表管理信息表中,其中,信息中至少包括:中间表表名、中间表对应的核心查询内容、中间表的状态、中间表的数据量、中间表的生效时间和中间表对应的附加条件内容。

进一步地,从中间表管理信息表确定待评估的中间表,其中,待评估的中间表为状态为新建状态的中间表;获取待评估的中间表对应的原生SQL查询语句;获取原生SQL查询语句在原表查询的查询时长,得到查询时长一;将待评估的中间表替代原生SQL查询语句中的核心查询内容,得到调整后的样本语句;执行调整后的样本语句获取查询时长,得到查询时长二;基于查询时长一和查询时长二对待评估的中间表进行评估。

进一步地,基于查询时长一和查询时长二对待评估的中间表进行评估包括:如果查询时长二小于查询时长一的预设比例;确定待评估的中间表对查询时长的优化达到预设要求;将中间表管理信息表中的待评估的中间表的状态修改为上线状态以及待评估的中间表的生效时间,同时设置待评估的中间表的存活周期。

进一步地,定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表;查询一个存活周期内状态为上线状态且过期的中间表的访问频率;将访问频率低于预设频率的中间表执行删除;对访问频率不低于预设频率的中间表的延长存活周期。

进一步地,确定中间表原表查询语句,其中,中间表原表查询语句为中间表管理信息表中目标中间表的核心查询属性构造的查询语句;执行中间表原表查询语句,如果结果为空,执行删除目标中间表的操作;如果结果不为空,将中间表原表查询语句的执行结果与目标中间表中的数据进行对比;如果对比发现数据有差异,则采用中间表原表查询语句的执行结果更新目标中间表中的数据。

为了实现上述目的,根据本申请的另一方面,提供了一种基于结构化查询语言SQL的查询装置。该装置包括:第一获取单元,用于获取原生SQL,其中,原生SQL用于进行数据查询;第一解析单元,用于对原生SQL进行语法解析,从原生SQL提取核心查询内容;第一判断单元,用于判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;第一查询单元,用于若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

为了实现上述目的,根据本申请的另一方面,提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时执行上述任意一项的方法。

为了实现上述目的,根据本申请的另一方面,提供了一种存储介质,存储介质包括存储的程序,其中,程序执行上述任意一项的方法。

通过本申请,采用以下步骤:获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果,解决了相关技术中由于在数据查询过程中,存在开发时间长,调整周期长,导致SQL的查询效率较低的问题。本发明能够以自动化的方式创建和管理中建表,支持一定程度的查询复用,弥补现有技术查询结果缓存方面的不足,确保优化质量,节省成本,进而达到了提高系统整体SQL查询效率的效果。

附图说明

构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例提供的基于结构化查询语言SQL的查询方法的流程图;

图2是根据本申请实施例提供的基于结构化查询语言SQL的查询方法的逻辑架构的示意图;

图3是根据本申请实施例提供的基于结构化查询语言SQL的查询装置的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为了便于描述,以下对本申请实施例涉及的部分名词或术语进行说明:

中间表:中间表是业务逻辑上的概念,是数据库中专门存放中间计算结果的数据表。一个典型的场景是:数据库中原始数据表要经过复杂的计算,才能在报表系统上展示出来,利用中间表将一些复杂计算的结果先保存起来,在此基础上进行计算,方便数据操作。

索引:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

Druid:是一个组件库,提供一种高效、功能强大、可扩展性好的数据库连接池。

SQL Parser:是上述Druid的解析组件。

AST语法树:(Abstract Syntax Tree):通俗的理解抽象地将代码根据源代码语法生成对应的树状结构。

SQLSelectQueryBlock:是一种对象。

getSelectList():是一种方法,方法可以被对象调用。

SQLExpr:SQL函数表达式。

根据本申请的实施例,提供了一种基于结构化查询语言SQL的查询方法。

图1是根据本申请实施例的基于结构化查询语言SQL的查询方法的流程图。如图1所示,该方法包括以下步骤:

步骤S101,获取原生SQL,其中,原生SQL用于进行数据查询。

如图2所示,图2是根据本申请实施例的基于结构化查询语言SQL的查询方法的逻辑架构的示意图,主要模块包括:SQL拦截器,中间表建表组件,中间表评估组件,中间表维护组件。

报表系统数据查询过程中,由SQL拦截器决定执行查询原生SQL查询,即可得到上述的原生SQL。

步骤S102,对原生SQL进行语法解析,从原生SQL提取核心查询内容。

对步骤S101获取的原生SQL进行语法解析处理,可以拆分为核心查询部分和附加条件部分。

原生SQL语句解析处理可选用Druid中SQL Parser组件实现。依据原生SQL语句构造AST语法树后,AST树每层获得SQLSelectQueryBlock对象,可调用对象的getSelectList()方法获取当前语句的SELECT部分,其他部分类似。另外SQLExpr的各种实现类能够完成字段提取和条件分析。

例如,原生SQL语句如下:

如上,SQL语句的执行顺序是:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT,因为ORDER BY、LIMIT不会影响查询结果集,暂不考虑。GROUP BY、HAVING以GROUP BY为主。本申请仅对最外层SQL进行变换处理,中间表替代的目标范围是SELECT、FROM,也就是说SELECT、FROM部分是我们接下来操作所要解析提取的核心查询内容部分。

原生SQL核心查询内容具体解析提取操作如下:

首先,解析原生SQL语句中的SELECT语句时,SELECT部分可通过AST树得到的SQLSelectQueryBlock对象调用getSelectList()方法获取,解析原生SQL语句中的FROM语句时,FROM部分可通过AST树得到的SQLFromQueryBlock对象调用getFromList()方法获取。WHERE部分可通过AST树得到的SQLWhereQueryBlock对象调用getWhereList()方法获取,其他部分类似。本申请主要用到的部分是SELECT、FROM、WHERE部分,其中字段解析提取和条件分析通过SQLExpr的各种实现类完成,此处不一一赘述。

然后,将上述原生SQL解析出的FROM内容,SELECT列表和WHERE列表,按照FROM内容进行分组。遍历每组下SELECT列表和WHERE列表,通过上述字段解析方法和条件分析方法,解析出所有SELECT列表字段和别名的集合,如:“table1.a”,“a”,解析出WHERE列表所用到的字段集合,然后将WHERE的字段集合合并到SELECT集合中,其中补充进来的字段,需添加别名,以table.a为例,别名为table_a,规则不仅限于此方法。

最后,将解析后的SELECT和FROM内容合并,就完成了提取到核心查询部分的操作,我们将原生SQL语句解析处理后,合并语句内容为:例如,

如上,我们得到SELECT部分为SELECTtable1.a AS a,table2.b AS b,table1.cAS table1_c,table2.d AS table2_d,其中table1.c AS table1_c,table2.d AS table2_d两个表包涵WHERE的字段的别名,如table1.c的WHERE的字段别名为table1_c、table2.d的WHERE的字段别名为table2_d。也就是说,分组下的WHERE列表table1_c、table1_c即为核心查询部分对应的附件条件部分。

具体的,我们将上述得到的核心查询部分作为中间表后续建表依据,附加条件部分作为中间表后续添加索引的依据。同时记录下原生SQL和提取的核心查询部分的对应关系到评估样本表中。

步骤S103,判断中间表管理信息表中是否记录了与核心查询内容对应的中间表。

需要说明的是,在判断中间表管理信息表中是否记录了与核心查询内容对应的中间表之前,一开始中间表管理信息表中是没有任何中间表信息,当数据进行SQL查询时,只有原生SQL语句解析出来的核心查询部分,于是,我们基于步骤S102解析提取到的核心查询内容,并创建对应的中间表。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,在判断中间表管理信息表中是否记录了与核心查询内容对应的中间表之前,该方法还包括:获取预设时间内访问原表查询且查询时长超过阈值的查询记录;从查询记录中提取SQL内容;分别对每个SQL内容进行语法解析,提取每个SQL内容对应的核心查询内容和附加条件内容;基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表包括:依据每个SQL内容对应的核心查询内容创建对应的中间表;基于附加条件内容对创建的中间表添加索引。

具体地,在创建每个SQL内容对应的中间表之后,该方法还包括:将每个SQL内容对应的中间表的信息记录在中间表管理信息表中,其中,信息中至少包括:中间表表名、中间表对应的核心查询内容、中间表的状态、中间表的数据量、中间表的生效时间和中间表对应的附加条件内容。

中间表的状态包括上线状态、新建状态、删除状态(一般不显示此状态)。其中,上线状态的中间表是指,当系统执行原生SQL查询解析后合并的样本语句时,计算出由核心查询语句建立的中间表样本语句的平均查询时长,如果中间表样本平均查询时长小于原生查询时长的预设比例,如80%,说明中间表对查询时长的优化已达到要求,更新中间表状态为上线状态。

中间表的生效时间是指,一般来说,中间表都预先设置一个存活周期,当我们确定中间表为上线状态时,同时设置中间表存活周期,如30分钟。

上述为建立中间表的一些相关内容,具体建表动作后续详述,回到本步骤的第一项说明,当进行数据SQL查询前,我们首先得判断中间表管理信息表中是否有与核心查询内容对应的,上线且未过期的之前创建好的中间表,其次再决定是否建表。假设一开始中间表管理信息表中存在诸多上线且未过期的中间表,但无当前表的核心查询语句对应的中间表,此时基于核心查询部分语句创建中间表。接下来进行建表操作,建立具有与当前核心查询部分对应的中间表。

建表具体实现方式为:由于每种数据库方式不同,本申请以常用的MySQL为例,需要分两步建表,第一步:在CREATE TABLE表名AS SELECT语句后面添加条件不成立的WHERE条件,此时仅会创建表结构。第二步:INSERT INTO表名SELECT语句,插入数据到中间表。中间表表名也可以用核心查询部分的MD5加密值代替,命名方法不仅限于此方法,并在创建后添加新记录到中间表管理信息表中,设置中间表状态为新建状态,设置中间表的字段属性,即上一步中SELECT的原字段名和别名集合,这里的别名实际就是中间表的字段名,设置核心查询、附加条件属性等。

建表完成后,添加新记录到中间表管理信息表中,设置中间表状态为新建状态。并且当前表原生SQL查询语句变化如下:基于构造每个原生查询语句的语法树,对SELECT、WHERE、GROUP BY、ORDER BY部分的原表字段,用中间表字段代替;中间表名替换原FROM部分,例如:

其中,若中间表数据量大于预设值的,需要为其建立索引以提高SQL执行效率。根据步骤S102得到的核心查询部分对应的附件条件部分,基于附加条件增加表索引。

具体的,基于附加条件增加表索引方法为:遍历附加条件中WHERE组的个数,这个数据代表查询表的条件的种类数量。遍历每个WHERE组的每一项,解析条件表达式类型,排除掉对字段有运算的条件,如:YEAR(table.x)=‘2020’,对字段进行计数统计。选取字段计数在查询表种类数量的占比超过一半的字段,创建多个单列索引,后续查询时由数据库优化器决定如何使用索引。

通过以上步骤完成了建表的动作,此时中间表的状态为新建状态,我们需要对新建状态的中间表进行评估操作,这样做的目的是进一步保证优化效果。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,从中间表管理信息表确定待评估的中间表,其中,待评估的中间表为状态为新建状态的中间表;获取待评估的中间表对应的原生SQL查询语句;获取原生SQL查询语句在原表查询的查询时长,得到查询时长一;将待评估的中间表替代原生SQL查询语句中的核心查询内容,得到调整后的样本语句;执行调整后的样本语句获取查询时长,得到查询时长二;基于查询时长一和查询时长二对待评估的中间表进行评估。

需要说明的是,评估样本表找到中间表对应的原生查询语句进行二者评估时,中间表查询与原生表查询操作环境是同时且独立地执行评估。每个中间表评估,先抽取部分原生查询语句样本。查询日志记录表,以中间表创建时间点的前一段时间为区间,统计原生样本语句查询平均时长,作为原生查询时长标准。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,基于查询时长一和查询时长二对待评估的中间表进行评估包括:如果查询时长二小于查询时长一的预设比例;确定待评估的新建状态下的中间表对查询时长的优化达到预设要求;将中间表管理信息表中的新建状态修改为上线状态,以及设置的中间表的生效时间,同时设置上线状态中间表的存活周期。并将信息记录到中间表管理信息表中。

例如,当系统执行原生SQL查询解析后合并的样本语句时,计算出由核心查询语句建立的中间表样本语句的平均查询时长二,如果中间表样本平均查询时长二小于原生查询时长一的预设比例,如80%,说明中间表对查询时长的优化已达到要求,更新中间表状态为上线状态。

在实际的操作中,中间表是具有存活周期的,为了提升整体系统的优化效率,我们也需要定期清理中间表,通过定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表,查询一个存活周期内该中间表在日志记录表的数据访问,通过查询其访问频率高低与否决定是否删除。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表;查询一个存活周期内状态为上线状态且过期的中间表的访问频率;将访问频率低于预设频率的中间表执行删除;对访问频率不低于预设频率的中间表的延长存活周期。

例如,在扫描中间表管理信息表时,发现确定状态为上线状态且过期的中间表table_a时,查询一个存活周期内该中间表table_a在日志记录表的数据,计算访问频率,若中间表table_a的访问频率过低或者没有,执行删除table_a,否则设置延长一个存活周期的时间。

上述操作我们可以实现定期清理中间表,避免存储浪费,同时为保证数据查询的准确性,中间表数据也需要定期更新。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询方法中,确定中间表原表查询语句,其中,中间表原表查询语句为中间表管理信息表中目标中间表的核心查询属性构造的查询语句;执行中间表原表查询语句,如果结果为空,执行删除目标中间表的操作;如果结果不为空,将中间表原表查询语句的执行结果与目标中间表中的数据进行对比;如果对比发现数据有差异,则采用中间表原表查询语句的执行结果更新目标中间表中的数据。

具体的更新数据实现方式,以当前表table_a为例,以它的核心查询属性构造查询语句构成的中间表原表table_a,执行当前中间表的中间表原表table_a查询语句,并查看日志记录表的数据访问频率。如果结果为空,执行删除中间表操作。如果执行当前中间表的中间表原表table_a查询语句后,结果不为空,并且发现与当前中间表table_a数据有差异时,用中间表原表查询语句的执行结果更新中间表数据。此操作达到自动更新中间表数据的目的,以保证查询的准确性。

上述是当判断出中间表管理信息表中没有记录与核心查询内容对应的中间表时,我们进行的一系列建表操作。

步骤S104,若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

具体的,根据步骤S103内容,创建前检查下中间表管理信息表中,是否已存在该中间表,如不存在则执行建表语句。当中间表存在记录时,原生查询SQL调整为中间表查询。并且当前数据查询信息会同时记录到日志记录表中。

当前数据查询信息记录到日志记录表的具体操作是,当执行中间表数据SQL查询时,根据图2所示,SQL拦截器作为一个查询端口,作用是指出当前表从中间表出,并将返回时的查询信息记录到日志记录表中,每个SQL内容对应的中间表的信息记录在中间表管理信息表中。

综上,本申请实施例提供的基于结构化查询语言SQL的查询方法,通过获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果,解决了相关技术中由于在数据查询过程中,存在开发时间长,调整周期长,导致SQL的查询效率较低的问题。本发明能够以自动化的方式创建和管理中建表,支持一定程度的查询复用,弥补现有技术查询结果缓存方面的不足,确保优化质量,节省成本,进而达到了提高系统整体SQL查询效率的效果。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例还提供了一种基于结构化查询语言SQL的查询装置,需要说明的是,本申请实施例的基于结构化查询语言SQL的查询装置可以用于执行本申请实施例所提供的用于基于结构化查询语言SQL的查询方法。以下对本申请实施例提供的基于结构化查询语言SQL的查询装置进行介绍。

图3是根据本申请实施例的基于结构化查询语言SQL的查询装置的示意图。如图3所示,该装置包括:第一获取单元301、第一解析单元302、第一判断单元303、第一查询单元304。

具体的,第一获取单元301,用于获取原生SQL,其中,原生SQL用于进行数据查询;

第一解析单元302,用于对原生SQL进行语法解析,从原生SQL提取核心查询内容;

第一判断单元303,用于判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;

第一查询单元304,用于若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

综上,本申请实施例提供的基于结构化查询语言SQL的查询装置,通过第一获取单元301获取原生SQL,其中,原生SQL用于进行数据查询;第一解析单元302对原生SQL进行语法解析,从原生SQL提取核心查询内容;第一判断单元303判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;第一查询单元304若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果,解决了相关技术中由于在数据查询过程中,存在开发时间长,调整周期长,导致SQL的查询效率较低的问题。本发明能够以自动化的方式创建和管理中建表,支持一定程度的查询复用,弥补现有技术查询结果缓存方面的不足,确保优化质量,节省成本,进而达到了提高系统整体SQL查询效率的效果。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一判断单元303包括:第一获取模块,用于获取预设时间内访问原表查询且查询时长超过阈值的查询记录;第一提取模块,用于从查询记录中提取SQL内容;第一解析模块,用于分别对每个SQL内容进行语法解析,提取每个SQL内容对应的核心查询内容和附加条件内容;第一创建模块,用于基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一创建模块包括:第一创建子模块,用于依据每个SQL内容对应的核心查询内容创建对应的中间表;第一添加子模块,用于基于附加条件内容对创建的中间表添加索引。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一创建模块包括:第一记录子模块,用于将每个SQL内容对应的中间表的信息记录在中间表管理信息表中,其中,信息中至少包括:中间表表名、中间表对应的核心查询内容、中间表的状态、中间表的数据量、中间表的生效时间和中间表对应的附加条件内容。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一创建模块包括:第一确定子模块,用于从中间表管理信息表确定待评估的中间表,其中,待评估的中间表为状态为新建状态的中间表;第一获取子模块,用于获取待评估的中间表对应的原生SQL查询语句;第二获取子模块,用于获取原生SQL查询语句在原表查询的查询时长,得到查询时长一;第一替代子模块,用于将待评估的中间表替代原生SQL查询语句中的核心查询内容,得到调整后的样本语句;第三获取子模块,用于执行调整后的样本语句获取查询时长,得到查询时长二;第一评估子模块,用于基于查询时长一和查询时长二对待评估的中间表进行评估。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一评估子模块包括:第二确定子模块,用于如果查询时长二小于查询时长一的预设比例;确定待评估的中间表对查询时长的优化达到预设要求;第一处理子模块,用于将中间表管理信息表中的待评估的中间表的状态修改为上线状态以及待评估的中间表的生效时间,同时设置待评估的中间表的存活周期。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一处理子模块包括:第三确定子模块,用于定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表;第一查询子模块,用于查询一个存活周期内状态为上线状态且过期的中间表的访问频率;第一删除子模块,用于将访问频率低于预设频率的中间表执行删除;第一延长子模块,用于对访问频率不低于预设频率的中间表的延长存活周期。

可选地,在本申请实施例提供的基于结构化查询语言SQL的查询装置中,第一处理子模块包括:第四确定子模块,用于确定中间表原表查询语句,其中,中间表原表查询语句为中间表管理信息表中目标中间表的核心查询属性构造的查询语句;第一判断子模块,用于执行中间表原表查询语句,如果结果为空,执行删除目标中间表的操作;第二判断子模块,用于如果结果不为空,将中间表原表查询语句的执行结果与目标中间表中的数据进行对比;第一更新子模块,用于如果对比发现数据有差异,则采用中间表原表查询语句的执行结果更新目标中间表中的数据。

基于结构化查询语言SQL的查询装置包括处理器和存储器,上述的第一获取单元301、第一解析单元302、第一判断单元303、第一查询单元304。等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来基于结构化查询语言SQL的查询。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现基于结构化查询语言SQL的查询方法。

本发明实施例提供了一种处理器,处理器用于运行程序,其中,程序运行时执行基于结构化查询语言SQL的查询方法。

本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

处理器执行程序时还实现以下步骤:获取预设时间内访问原表查询且查询时长超过阈值的查询记录;从查询记录中提取SQL内容;分别对每个SQL内容进行语法解析,提取每个SQL内容对应的核心查询内容和附加条件内容;基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表。

处理器执行程序时还实现以下步骤:依据每个SQL内容对应的核心查询内容创建对应的中间表;基于附加条件内容对创建的中间表添加索引。

处理器执行程序时还实现以下步骤:将每个SQL内容对应的中间表的信息记录在中间表管理信息表中,其中,信息中至少包括:中间表表名、中间表对应的核心查询内容、中间表的状态、中间表的数据量、中间表的生效时间和中间表对应的附加条件内容。

处理器执行程序时还实现以下步骤:从中间表管理信息表确定待评估的中间表,其中,待评估的中间表为状态为新建状态的中间表;获取待评估的中间表对应的原生SQL查询语句;获取原生SQL查询语句在原表查询的查询时长,得到查询时长一;将待评估的中间表替代原生SQL查询语句中的核心查询内容,得到调整后的样本语句;执行调整后的样本语句获取查询时长,得到查询时长二;基于查询时长一和查询时长二对待评估的中间表进行评估。

处理器执行程序时还实现以下步骤:如果查询时长二小于查询时长一的预设比例;确定待评估的中间表对查询时长的优化达到预设要求;将中间表管理信息表中的待评估的中间表的状态修改为上线状态以及待评估的中间表的生效时间,同时设置待评估的中间表的存活周期。

处理器执行程序时还实现以下步骤:定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表;查询一个存活周期内状态为上线状态且过期的中间表的访问频率;将访问频率低于预设频率的中间表执行删除;对访问频率不低于预设频率的中间表的延长存活周期。

处理器执行程序时还实现以下步骤:确定中间表原表查询语句,其中,中间表原表查询语句为中间表管理信息表中目标中间表的核心查询属性构造的查询语句;执行中间表原表查询语句,如果结果为空,执行删除目标中间表的操作;如果结果不为空,将中间表原表查询语句的执行结果与目标中间表中的数据进行对比;如果对比发现数据有差异,则采用中间表原表查询语句的执行结果更新目标中间表中的数据。

本文中的设备可以是服务器、PC、PAD、手机等。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:获取原生SQL,其中,原生SQL用于进行数据查询;对原生SQL进行语法解析,从原生SQL提取核心查询内容;判断中间表管理信息表中是否记录了与核心查询内容对应的中间表;若存在记录,则基于原生SQL调整为中间表查询SQL执行查询,得到查询结果。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:获取预设时间内访问原表查询且查询时长超过阈值的查询记录;从查询记录中提取SQL内容;分别对每个SQL内容进行语法解析,提取每个SQL内容对应的核心查询内容和附加条件内容;基于每个SQL内容对应的核心查询内容和附加条件内容,创建每个SQL内容对应的中间表。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:依据每个SQL内容对应的核心查询内容创建对应的中间表;基于附加条件内容对创建的中间表添加索引。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:将每个SQL内容对应的中间表的信息记录在中间表管理信息表中,其中,信息中至少包括:中间表表名、中间表对应的核心查询内容、中间表的状态、中间表的数据量、中间表的生效时间和中间表对应的附加条件内容。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:从中间表管理信息表确定待评估的中间表,其中,待评估的中间表为状态为新建状态的中间表;获取待评估的中间表对应的原生SQL查询语句;获取原生SQL查询语句在原表查询的查询时长,得到查询时长一;将待评估的中间表替代原生SQL查询语句中的核心查询内容,得到调整后的样本语句;执行调整后的样本语句获取查询时长,得到查询时长二;基于查询时长一和查询时长二对待评估的中间表进行评估。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:如果查询时长二小于查询时长一的预设比例;确定待评估的中间表对查询时长的优化达到预设要求;将中间表管理信息表中的待评估的中间表的状态修改为上线状态以及待评估的中间表的生效时间,同时设置待评估的中间表的存活周期。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:定期扫描中间表管理信息表,确定状态为上线状态且过期的中间表;查询一个存活周期内状态为上线状态且过期的中间表的访问频率;将访问频率低于预设频率的中间表执行删除;对访问频率不低于预设频率的中间表的延长存活周期。

当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:确定中间表原表查询语句,其中,中间表原表查询语句为中间表管理信息表中目标中间表的核心查询属性构造的查询语句;执行中间表原表查询语句,如果结果为空,执行删除目标中间表的操作;如果结果不为空,将中间表原表查询语句的执行结果与目标中间表中的数据进行对比;如果对比发现数据有差异,则采用中间表原表查询语句的执行结果更新目标中间表中的数据。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号