我的查询非常复杂(Oracle 10g)。它包含大约十个选择子查询。查询有效,但时间太长。我应该以某种方式划分这个查询?我的意思是有一些标准sql查询可以多久/复杂。查询有效,但在我看来并不是最好的解决方案。 例如,一个子查询在那里重复(它查询小于20行的表),如何在此查询期间使其仅运行一次? 也许这是一个太笼统的问题 谢谢你的所有答案 Tonu
答案 0 :(得分:2)
从版本9开始,您可以使用称为子查询因子的功能(也称为with子句)将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 :(得分:0)
尝试查看with子句,它确实执行一次子查询,然后让你再次引用多佛的结果行
答案 2 :(得分:0)
我只能建议大量使用EXPLAIN PLAN来弄清楚查询优化器正在做什么来重新组织查询。
如果没有更接近问题域的可用信息,另一种方法可能是与业务部门交谈并找出他们真正想要的内容并查看系统。
我曾经遇到过“准时交货”这样的情况,其中“准时交货”的定义被商业中层管理人员认可,渴望呈现“好消息节目”并臃肿到极致因为特殊情况处理。 推回,转到管理手册,实现那里的定义,并使用由Oracle EBS创建的便捷聚合表,将运行时间从25分钟减少到2秒。