2010-06-21 66 views
0

我有很长很复杂的查询(Oracle 10g)。它包含大约10个选择子查询。查询有效,但时间太长。我应该以某种方式划分这个查询吗?我的意思是有一些标准可以多长/复杂的SQL查询。该查询的工作原理,但它似乎并不像我最喜欢的解决方案。 例如,一个子查询在那里重复(它查询小于20行的表),我怎么能让它在查询过程中只运行一次? 也许是过于笼统的问题 感谢所有的答案 Tonulong oracle查询

+0

发布代码,也许我们可以给出更具体的帮助。 – 2010-06-21 11:24:42

回答

0

尝试寻找到与条款,但它确实做一个子查询一次,然后让你在一个多佛再次引用resuling行

0

我只能建议大量使用EXPLAIN PLAN来确定查询优化器在重新组织查询时所做的工作。

另一种方法可能是与业务进行交谈,并找出他们真正想要的内容,并在系统中查看,如果没有可用的信息更接近问题域。

我曾经有过类似于“准时交货”的情况,其中“准时交货”的定义被商业中层管理人员屠杀了,因此渴望呈现一个“好消息展示”并臃肿由于特殊情况处理极端。 推回到管理手册,实现那里的定义,并使用由Oracle EBS创建的方便的聚合表,将运行时间从25分钟减少到2秒。

2

从版本9开始,您可以使用称为子查询因子分析(也称为with-clause)的功能几乎像任何其他代码一样来考虑您的SQL代码。

的文档:http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2075668

一个例子:http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2075888

问候, 罗布。

+1

也被称为Common Table Expressions,我相信它是ANSI SQL术语。 – APC 2010-06-21 10:18:41