内部联接与哪些条件,将首先执行?加入还是在哪里?

时间:2013-08-28 17:13:55

标签: sql join db2 where

例如:

select T1.*, T2.* 
from TABLE1 T1, TABLE2 T2
where T1.id = T2.id
  and T1.name = 'foo'
  and T2.name = 'bar';  

首先通过id连接T1和T2,然后选择满足名称条件的记录? 或者选择满足T1或T2中名称条件的记录,然后将它们连接在一起?

并且,example1和example2(DB2)之间的性能是否存在差异?

例2:

select * 
from  
(
  select * from TABLE1 T1 where T1.name = 'foo'
)  A, 
(
  select * from TABLE2 T2 where T2.name = 'bar'
)  B  
where A.id = B.id;

2 个答案:

答案 0 :(得分:1)

查询的执行方式取决于查询计划程序对其执行的操作。根据可用的索引和表中的数据量,查询计划可能看起来不同。计划者试图按照它认为最有效的顺序进行工作。

如果规划人员做得很好,两个查询的计划应该相同,否则第一个查询可能会更快,因为第二个查询会创建两个没有任何索引的中间结果。

答案 1 :(得分:0)

例1更有效,因为它没有嵌入式查询。关于如何构建结果集,我不知道 - 我不知道DB2。