我得到了别人加入9(!)表的代码 - 我过去使用它没有任何问题,但现在所有的表都随着时间的推移而增长,所以我得到了奇怪的空间错误。
我得到了建议来分解连接并进行多个成对连接。应该很简单,因为所有的连接都是内部的,我读到的所有内容都说在这种情况下顺序应该没有区别 - 但是我得到的案例数量与我应该的数量不同。没有给出任何特定的非常复杂的例子,有什么可能的原因呢?
由于
答案 0 :(得分:0)
对我来说,在一个声明中加入9个表是很多的!成对可能 一直不精确 - 我的意思是加入两个表然后加入 结果到另一个表,然后结果到另一个表。明显 他们的订购程度达到必要的密钥 每一点。
这对我来说并不明显。事实上,事实并非如此。 MOST SQL平台(您还没有说过您正在使用哪个)编译SQL语句并形成执行计划。该计划将在执行连接时进行优化和移动。在许多并行运行的系统上,它们将同时执行连接。
理解陈述的“顺序”的方法是查看执行计划。
控制订单的方法(在许多系统上)是使用CTE。像这样:
WITH subsetofbigtable AS
(
SELECT *
FROM reallybigtable
WHERE date = '2014-01-01'
)
SELECT *
FROM subsetofbigtable
JOIN anothertable1 ...
JOIN anothertable2 ...
JOIN anothertable3 ...
JOIN anothertable4 ...
JOIN anothertable5 ...
您还可以将CTE链接到“订购”连接:
WITH subsetofbigtable AS
(
SELECT *
FROM reallybigtable
WHERE date = '2014-01-01'
), chain1 AS
(
SELECT *
FROM subsetofbigtable
JOIN anothertable1 ...
), chain2 AS
(
SELECT *
FROM chain1
JOIN anothertable2 ...
)
SELECT *
FROM chain2
JOIN anothertable3 ...
JOIN anothertable4 ...
JOIN anothertable5 ...