oracle查询中的“WITH”子句优化
Posted
技术标签:
【中文标题】oracle查询中的“WITH”子句优化【英文标题】:"WITH" clause optimization in oracle query 【发布时间】:2012-02-28 10:21:05 【问题描述】:当我在查询中使用许多 WITH 子句时,它执行的时间更长,而不是没有它。 查询结构如下:
with t1 as (select some_fields from table1 inner join table2),
t2 as (select some_fields from t1 inner join table3),
t3 as (select some_fields from t2 inner join table4)
select * from t3
应该使用什么方法来优化类似查询? 在我的例子中,每个子查询返回大约 1000 万行。
【问题讨论】:
这取决于查询!为了支持您,请发布您的查询!如果您有不同版本的查询(带有和不带有WITH
子句),请全部发布!
你有什么替代这个更快的语句?请问也可以发一下吗!通常对于 Oracle 数据库,如果您使用 WITH
clause 没有区别!
我不能按照政策来做(。谢谢,试着了解自己
为什么不在这些表之间进行连接呢?对于您的示例: select some_fields from t2 inner join table4
【参考方案1】:
由于涉及到所有保密问题,我建议您查看EXPLAIN PLAN 的两个查询。在我看来,WITH 只不过是允许您在子查询中重用某些 sql 的语法糖。但总而言之,它并不总是导致最有效的计划。
是的,10 000 000 总是很慢。
【讨论】:
【参考方案2】:我确认 WITH CLAUSE 不会提高 Oracle 数据库的性能。 它只允许使用查询名称而不是整个查询文本的重复。
此外,它还允许定义 PL/SQL 函数,以便随后在查询中使用。
【讨论】:
以上是关于oracle查询中的“WITH”子句优化的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE 11G 中的 WITH 子句使用 UNION ALL