2012-02-28 97 views
0

当我在查询中使用很多WITH子句时,它会执行更长的时间,而不是没有它。 查询结构是这样的:oracle查询中的“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万行。

+2

这取决于查询!为了支持你,请发布你的查询!如果你有不同版本的查询(有或没有'WITH'子句),请将它们全部发布! – Tim 2012-02-28 10:25:38

+3

你的这种说法更快吗?你也可以发布它!通常对于Oracle数据库来说,如果你使用'WITH'或不使用! – Tim 2012-02-28 10:30:41

+0

我无法根据策略来做(谢谢,试着了解我自己 – DmitryB 2012-02-28 10:43:59

回答

3

在涉及所有秘密的情况下,我建议您查看两个查询的EXPLAIN PLAN。在我看来,WITH不过是语法糖,允许您在子查询中重用某些sql。但总的来说,它并不总是能带来最有效的计划。

是的,10 000 000总是会变慢。

2

我确认WITH CLAUSE不会提高Oracle数据库的性能。 它只允许使用查询名称而不是整个查询文本的重复。

此外,它还允许定义随后在查询中使用的PL/SQL函数。