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之前可以执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |