[发明专利]一种非相关子查询的优化方法和装置有效
申请号: | 201710447344.0 | 申请日: | 2017-06-14 |
公开(公告)号: | CN107315790B | 公开(公告)日: | 2021-07-06 |
发明(设计)人: | 李海翔 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F16/2453 | 分类号: | G06F16/2453;G06F16/2455 |
代理公司: | 深圳翼盛智成知识产权事务所(普通合伙) 44300 | 代理人: | 黄威 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 相关 查询 优化 方法 装置 | ||
本发明实施例公开了一种非相关子查询的优化方法和装置;本发明实施例采用确定数据库查询语句中目标子句是否存在非相关子查询语句,若存在,则获取目标子句对应的执行结果集的预估行数,当该预估行数小于预设阈值时,执行该非相关子查询语句,得到执行结果集,根据该执行结果集对该目标子句进行改写,以消除该非相关子查询语句;该方案可以在语句执行阶段之前如在逻辑优化阶段,预先执行非相关子查询语句,并根据执行结果来对非相关子查询语句所在的目标子句进行改写,以消除非相关子查询,这样在后续语句执行阶段中无需进行任何非相关查询语句相关的查询和访问,可以提高具有非相关子查询的数据库查询语句的执行效率。
技术领域
本发明涉及计算机技术领域,具体涉及一种非相关子查询的优化方法和装置。
背景技术
数据处理系统如数据库系统、大数据处理系统等通常都以支持SQL(StructuredQuery Language,结构化查询语言)功能为主要实现目标,以为用户提供数据操作便利。
在SQL处理过程中,需要SQL引擎对SQL语句进行词法解析、语法解析、语义分析、逻辑优化和物理优化,然后把得到的执行计划交给执行器去执行,这个过程被划分为三个阶段:分析阶段、优化阶段、执行阶段。
其中,子查询的优化发生在逻辑优化阶段,是逻辑优化阶段中的优化子阶段(通常称为查询重写)。一般来说,子查询可以分相关子查询和非相关子查询两种类型。
目前非相关子查询的优化方式主要包括半连接优化和“物化”优化,其中,半连接优化,属于子查询上拉技术,是用半连接(semi join)的语义消除子查询的一种优化形式,属于逻辑优化子阶段;物化优化是把非相关子查询子句标识为“可物化”,并在执行阶段执行一次,然后把结果缓冲,供后续使用。
然而,采用目前非相关子查询的优化方式对具有非相关子查询的数据库查询语句(如SQL语句)进行优化,在执行阶段执行优化后的数据库查询语句时,需要多次访问子查询指定的表(如采用半连接优化)或者多次访问子查询指定表对应的临时表(如采用物化优化),时间花费比较大,降低了具有非相关子查询的数据库查询语句的执行效率,尤其是在面临大数据量的查询时表现的更为明显。
发明内容
本发明实施例提供一种非相关子查询的优化方法和装置,可以提高具有非相关子查询的数据库查询语句的执行效率。
本发明实施例提供一种非相关子查询的优化方法,包括:
确定数据库查询语句中目标子句是否存在非相关子查询语句;
若存在,则获取目标子句对应的执行结果集的预估行数;
当所述预估行数小于预设阈值时,执行所述非相关子查询语句;
根据所述非相关子查询语句的执行结果集对所述目标子句进行改写,以消除所述非相关子查询语句。
相应的,本发明实施例还提供一种非相关子查询的优化装置,包括:
确定单元,用于确定数据库查询语句中目标子句是否存在非相关子查询语句;
获取单元,用于确定数据库查询语句中目标子句是否存在非相关子查询语句;
执行单元,用于当所述预估行数小于预设阈值时,执行所述非相关子查询语句;
改写单元,用于根据所述非相关子查询语句的执行结果集对所述目标子句进行改写,以消除所述非相关子查询语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710447344.0/2.html,转载请声明来源钻瓜专利网。