鉴于这两个问题:
Select t1.id, t2.companyName
from table1 t1
INNER JOIN table2 t2 on t2.id = t1.fkId
WHERE t2.aField <> 'C'
Run Code Online (Sandbox Code Playgroud)
要么:
Select t1.id, t2.companyName
from table1 t1
INNER JOIN table2 t2 on t2.id = t1.fkId and t2.aField <> 'C'
Run Code Online (Sandbox Code Playgroud)
这两者之间有明显的区别吗?在我看来,条款"t2.aField <>'C'"将在t2中符合连接条件的每一行上运行,无论如何.我不对吗?
更新:我在SQL Server中执行了"包含实际执行计划".这两个查询完全相同.
我更喜欢使用连接标准来解释表如何连接在一起。所以我会将附加子句放在 where 部分中。
我希望(尽管我没有统计数据)SQL Server 能够足够聪明地找到最佳查询计划,无论您使用什么语法。
但是,如果您的索引也包含 id 和 aField,我建议将它们放在内部联接标准中。
查看这 2(或 3)个场景中的查询计划并看看会发生什么会很有趣。好问题。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |