FROM子句中表的顺序

时间:2012-09-16 07:31:43

标签: sql oracle11g

对于像这样的SQL查询。

Select  * from TABLE_A a 
JOIN TABLE_B b 
  ON a.propertyA = b.propertyA
JOIN TABLE_C 
  ON b.propertyB = c.propertyB

表格的顺序是否重要。它在结果中无关紧要,但它们会影响性能吗?

可以假设表C中的数据远大于a或b。

3 个答案:

答案 0 :(得分:1)

对于每个sql语句,引擎将创建一个查询计划。因此,无论您如何使用它们,引擎都会选择正确的路径来构建查询。

有关您的计划的更多信息http://en.wikipedia.org/wiki/Query_plan

有些方法,考虑到您使用RDBMS来强制执行查询顺序和计划,但是,如果您认为引擎没有选择正确的路径,则会使用提示。

答案 1 :(得分:0)

有时候,表格顺序会在这里产生差异,(当你使用不同的联接时)

实际上我们加入了跨产品概念

如果您使用的是此A join B join C

之类的查询

它将被视为此(A*B)*C)

表示加入A和B表后第一个结果,然后它将与C表连接

因此,如果内部加入A(100记录)和B(200记录),如果它将给予(100记录)

然后这些(100记录)将与(1000记录的C)进行比较

答案 2 :(得分:0)

没有

嗯,发生这种情况的可能性很小,见this article by Jonathan Lewis。基本上,可能的连接顺序的数量增长非常快,并且优化器没有足够的时间来检查它们。在一些非常罕见的情况下,表的顺序可以用作打破平局。但我从来没有在现实生活中看到过这种情况,或者甚至没有看到它发生过。你不必担心它。