2012-09-16 38 views
1

对于像这样的sql查询。FROM子句中的表的顺序

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大得多。

+0

这将严重依赖于数据库。一个体面的数据库有一个“基于成本的优化器”,无论连接顺序如何,都可以找到最佳的计划。较简单的数据库(在这种情况下非常简单)可能并不复杂。你使用的是哪个数据库? –

+0

我正在使用Oracle 11G。 –

回答

1

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

更多的计划,你有http://en.wikipedia.org/wiki/Query_plan

有办法,考虑到你所使用的RDBMS执行查询订单和计划,使用提示,但是,如果你觉得发动机确实没有选择正确的路径。

0

有时表的顺序在这里创建了一个差异,(当您使用不同的连接)

其实我们的加盟对跨产品概念的工作

如果使用这样的查询A join B join C

它将会这样对待(A*B)*C)

表示加入A和B表后的第一个结果,然后它会使C表加入

所以如果后内加入A(100记录)和B(200记录),如果它会给(100记录)

,然后将这些(100记录)将与(1000记录的C)

0
比较

编号

嗯,发生这种情况的机会非常非常小,请参阅this article by Jonathan Lewis。基本上,可能的连接订单数量增长得非常快,并且没有足够的时间让优化器检查所有订单。在一些非常罕见的情况下,表格的顺序可以用作决胜局。但是我从来没有见过这种事情发生,甚至没有听说过这种事情发生在现实生活中的任何人。你不需要担心它。