加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在与WHERE子句一起使用时优化Oracle CONNECT BY

发布时间:2020-12-12 08:27:08 所属栏目:MsSql教程 来源:网络整理
导读:在使用同一查询中的WHERE条件之前,应用Oracle START WITH … CONNECT BY子句.因此,WHERE约束不会有助于优化CONNECT BY. 例如,以下查询可能会执行全表扫描(忽略dept_id的选择性): SELECT * FROM employees WHERE dept_id = 'SALE'START WITH manager_id is nu
在使用同一查询中的WHERE条件之前,应用Oracle START WITH … CONNECT BY子句.因此,WHERE约束不会有助于优化CONNECT BY.

例如,以下查询可能会执行全表扫描(忽略dept_id的选择性):

SELECT * FROM employees 
WHERE dept_id = 'SALE'
START WITH manager_id is null
CONNECT BY PRIOR employee_id = manager_id

我试图以两种方式提高性能:

查询A:

SELECT * FROM employees 
START WITH manager_id is null AND dept_id = 'SALE'
CONNECT BY PRIOR employee_id = manager_id

查询B:

SELECT * FROM (
               SELECT * FROM employees 
                WHERE dept_id = 'SALE'
              )
START WITH manager_id is null
CONNECT BY PRIOR employee_id = manager_id

虽然这两个查询都比原来好得多,但在Oracle 10g第2版上,查询B的执行效果要好于A.

您是否有类似的性能优化来处理CONNECT BY和WHERE子句?你如何解释查询B比查询A好多了?

解决方法

查询A表示从销售部门的经理开始,然后获得所有员工. Oracle不会“知道”所有返回的员工都将在销售部门进行查询,因此在执行CONNECT BY之前不能使用该信息来减少要处理的数据.

Query B明确地将要处理的数据集合简化到Sales中的那些员工,Oracle在执行CONNECT BY之前可以执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读