[发明专利]一种非相关子查询的优化方法和装置有效
申请号: | 201710447344.0 | 申请日: | 2017-06-14 |
公开(公告)号: | CN107315790B | 公开(公告)日: | 2021-07-06 |
发明(设计)人: | 李海翔 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F16/2453 | 分类号: | G06F16/2453;G06F16/2455 |
代理公司: | 深圳翼盛智成知识产权事务所(普通合伙) 44300 | 代理人: | 黄威 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 相关 查询 优化 方法 装置 | ||
1.一种非相关子查询的优化方法,其特征在于,包括:
确定数据库查询语句中目标子句是否存在非相关子查询语句;
若存在,则获取目标子句对应的待查询表的历史估计行数;根据所述目标子句的表达式获取相应的选择率;根据所述历史估计行数和所述选择率,获取目标子句对应的待查询表的预估行数;
当所述预估行数小于预设阈值时,执行所述非相关子查询语句;
根据所述非相关子查询语句的执行结果集对所述目标子句进行改写,以消除所述非相关子查询语句。
2.如权利要求1所述的优化方法,其特征在于,根据所述非相关子查询语句的执行结果集对所述目标子句进行改写,包括:
将所述目标子句的表达式中非相关子查询语句替换为非相关子查询语句的执行结果集;
根据所述目标子句中的操作符,对替换后的表达式进行相应的变形优化。
3.如权利要求1所述的优化方法,其特征在于,执行所述非相关子查询语句,包括:
执行非相关子查询语句,并在执行的过程中实时获取当前执行结果集的行数;
判断当前执行结果集的行数是否大于所述预设阈值;
若否,则继续执行所述非相关子查询语句,并返回获取当前执行结果集的行数的步骤,直到执行完非相关子查询语句为止。
4.如权利要求1所述的优化方法,其特征在于,在消除所述非相关子查询语句之后,所述优化方法还包括:
当改写后目标子句包含常量等式或不等式时,根据改写后目标子句包含的常量等式或不等式,对改写后目标子句的表达式进行优化。
5.一种非相关子查询的优化装置,其特征在于,包括:
确定单元,用于确定数据库查询语句中目标子句是否存在非相关子查询语句;
获取单元,用于当确定单元确定存在非相关子查询语句时,获取目标子句对应的待查询表的历史估计行数;根据所述目标子句的表达式获取相应的选择率;根据所述历史估计行数和所述选择率,获取目标子句对应的待查询表的预估行数;
执行单元,用于当所述预估行数小于预设阈值时,执行所述非相关子查询语句;
改写单元,用于根据所述非相关子查询语句的执行结果集对所述目标子句进行改写,以消除所述非相关子查询语句。
6.如权利要求5所述的优化装置,其特征在于,所述改写单元,包括:
替换子单元,用于将所述目标子句的表达式中非相关子查询语句替换为非相关子查询语句的执行结果集;
改写子单元,用于根据所述目标子句中的操作符,对替换后的表达式进行相应的变形优化,以消除所述非相关子查询语句。
7.如权利要求5所述的优化装置,其特征在于,所述执行单元,用于:
执行非相关子查询语句,并在执行的过程中实时获取当前执行结果集的行数;
判断当前执行结果集的行数是否大于所述预设阈值;
若否,则继续执行所述非相关子查询语句,并返回获取当前执行结果集的行数的步骤,直到执行完非相关子查询语句为止。
8.如权利要求5所述的优化装置,其特征在于,还包括:逻辑优化单元;
所述逻辑优化单元,用于在改写单元消除所述非相关子查询语句之后,当改写后目标子句包含常量等式或不等式时,根据改写后目标子句包含的常量等式或不等式,对改写后目标子句的表达式进行优化。
9.一种计算机可读存储介质,其存储有用于非相关子查询的优化的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1至4任一项所述的方法。
10.一种服务器,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1至4任一项所述的非相关子查询的优化方法中的步骤。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710447344.0/1.html,转载请声明来源钻瓜专利网。