如果我想在表A中找到一组条目而不是在表B中,我可以使用LEFT OUTER JOIN或NOT EXISTS.我听说过SQL Server适用于ANSI,在某些情况下,LEFT OUTER JOIN比NOT EXISTS效率更高.在这种情况下,ANSI JOIN会表现得更好吗?并且在SQL Server上加入运算符比一般的NOT EXISTS更有效吗?
JNK*_*JNK 60
Joe的链接是一个很好的起点. Quassnoi也涵盖了这一点.
通常,如果您的字段已正确编入索引,或者如果您希望过滤掉更多记录(即EXIST子查询中有大量行),NOT EXISTS则表现更好.
EXISTS并且NOT EXISTS两者都短路 - 一旦记录符合标准,它就会被包含或过滤掉,优化器会移动到下一条记录.
LEFT JOIN将加入所有记录,无论它们是否匹配,然后过滤掉所有不匹配的记录.如果您的表很大和/或您有多个JOIN条件,则这可能非常耗费资源.
我通常会尝试使用NOT EXISTS并EXISTS尽可能使用.对于SQL Server,IN它NOT IN在语义上是等效的,可能更容易编写. 这些是SQL Server中唯一可以保证短路的运算符.
| 归档时间: |
|
| 查看次数: |
53516 次 |
| 最近记录: |