[发明专利]一种数据库语句优化方法、装置、设备及存储介质有效
申请号: | 201910239809.2 | 申请日: | 2019-03-27 |
公开(公告)号: | CN109947791B | 公开(公告)日: | 2021-01-26 |
发明(设计)人: | 万伟;朱仲颖 | 申请(专利权)人: | 上海达梦数据库有限公司 |
主分类号: | G06F16/242 | 分类号: | G06F16/242 |
代理公司: | 北京品源专利代理有限公司 11332 | 代理人: | 孟金喆 |
地址: | 201203 上海*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 数据库 语句 优化 方法 装置 设备 存储 介质 | ||
本发明公开了一种数据库语句优化方法、装置、设备及存储介质。该方法包括:获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句,通过本发明的技术方案,能够实现提高数据库语句的执行效率。
技术领域
本发明实施例涉及计算机技术,尤其涉及一种数据库语句优化方法、装置、设备及存储介质。
背景技术
分组查询是数据库中常见的一种查询。在数据库SQL(Structured QueryLanguage,结构化查询语言)语句中可使用GROUP BY子句指定对数据按指定的列进行分组。例如,设表T中每一行数据记录了一个员工的基本信息,“SELECT部门号,COUNT(*)FROM TGROUP BY部门号;”语句指定对表T的数据按指定的分组列“部门号”进行分组,然后对每个分组使用COUNT(*)集函数统计组内记录行数,最后返回的是每个部门的部门号及人数。
通常,数据库对于分组的实现是将所有记录从FROM项中提取出来,如果有WHERE过滤条件,则将这些记录按照WHERE条件进行过滤,将满足条件的所有记录按照GROUP BY指定的分组列进行分组。当FROM项为派生表(类似一个根据SELECT语句构建的临时表)时,有时这种传统实现方式的性能会非常低。
假设有表T,该表有C1、C2、C3三列,有形如下列的查询:
SELECT MAX(D1),D2 FROM(SELECT C1 AS D1,FUNC(C2)AS D2,C3 ASD3 FROM T)GROUP BY D2;
由于这个查询的FROM项为派生表,则从FROM项提取记录时,需要对T表的每一条记录执行一次派生表的子查询“SELECT C1 AS D1,FUNC(C2)AS D2,C3 AS D3 FROM T”,如果T表数据量很大,查询效率会较低。当查询项中还包含函数计算如本例中的FUNC()时,对T表的每一条记录都需要计算FUNC()函数,如果函数本身较耗时,则查询的效率会更低。
发明内容
本发明实施例提供一种数据库语句优化方法、装置、设备及存储介质,以实现提高数据库语句的执行效率。
第一方面,本发明实施例提供了一种数据库语句优化方法,包括:
获取用户输入的查询语句;
若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;
根据所述内层分组子句转换所述查询语句。
进一步的,外层分组项中包括所述派生表的列。
进一步的,根据所述内层分组子句转换所述查询语句包括:
若所述派生表中存在不是外层分组项的查询项,则删除所述派生表的查询项。
进一步的,删除所述派生表的查询项之后,还包括:
新建内层派生表,所述内层派生表包括:包含内层分组子句的内层查询语句,根据外层分组子句构建所述内层查询语句;
根据所述内层派生表构建中间层派生表;
根据所述中间层派生表转换所述查询语句。
进一步的,所述查询语句还包括外层集函数,其中,所述外层集函数包括MAX函数、MIN函数、COUNT函数以及SUM函数中的至少一种,且所述SUM函数的参数为所述派生表的列,所述MAX函数、MIN函数和COUNT函数的参数为常数和/或所述派生表的列。
进一步的,根据所述内层分组子句转换所述查询语句包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海达梦数据库有限公司,未经上海达梦数据库有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910239809.2/2.html,转载请声明来源钻瓜专利网。