Sql 内部连接与where条件,哪个将首先执行?加入或在哪里加入条件?

Sql 内部连接与where条件,哪个将首先执行?加入或在哪里加入条件?,sql,join,db2,where,Sql,Join,Db2,Where,例如,1: 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

例如,1:

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;

示例1效率更高,因为它没有嵌入查询。关于结果集是如何构建的,我不知道——我不知道DB2。

查询将如何执行取决于查询计划器如何处理它。根据可用的索引和表中的数据量,查询计划可能会有所不同。规划者试图按照其认为最有效的顺序来做这项工作


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

示例1肯定更有效。无论何时何地,尽可能避免嵌入select语句。至于问题的第一部分。它必须首先执行连接,否则它将无法基于WHERE子句进行选择。也就是说,我肯定会使用#1,因为它更具可读性。同样的计划,谢谢你的提醒!