我总是写很长的sql,但是为了以后的维护。 一个sql语句分成多个语句更好吗? 例如:
select a.a1, a.a2, b.b3, sum(c.c4), b.b4...b.bn
from A a
inner join B b on a.a1=b.b1
left join C c on a.a2=c.c2
group by a.a1, a.a2, b.b3, b.b4,...,b.bn
我分为
create temp_table select a.a1, a.a2, sum(c.c4)
from A a
left join C c on a.a2=c.c2
group by a.a1, a.a2
select temp.*, b.b3, b.b4,...b.bn
from temp_table temp
inner join B b on temp.a1=b.b1
但它需要在pl / sql中创建表。有更好的方法吗?
Oracle的CHOOSE(软解析)能否更快地执行许多sql语句?
感谢经验分享。
答案 0 :(得分:3)
我喜欢将SQL编写为单个语句。我发现这种方法更好的原因有多种:
那就是说,优化器并不总是正确的。 Oracle有一个很好的优化器和一个利用统计数据的优化器。有时,在某些情况下,将复杂查询分成几部分可以提高性能:
虽然这些可能是有益的,但我自己因为复杂性和可维护性而回避。但是,它有时会更快。
答案 1 :(得分:1)
它很快就会更快。您正在从优化程序中隐藏您的意图。通常给它一个查询,没有用户功能以获得最佳性能。
答案 2 :(得分:0)
它不一定更快,因为它们都在Oracle服务器上运行,并且无论如何都会编译PL / SQL。
如果您通过一个SQL完成所有操作,则将查询优化留给Oracle,而如果编写自己的PL / SQL,则可以更好地控制查询的执行方式。但是如果你写的PL / SQL不好,那肯定会表现得更差。
但是,我不确定破解代码真的能提高可维护性。除非你说你可以在其他地方重用破碎的部分,这可以提高代码的重用率,我认为将它作为一个单一的陈述似乎更合乎逻辑。你绝对可以添加更多的评论来解释尽可能详细的细节,以便将来对谁进行阅读。