在SQL(MSSQL,Oracle等等)中,在连接表时,将过滤器添加到JOIN语句而不是在WHERE子句中有什么好处?
即
SELECT * FROM X INNER JOIN Y ON X.A = Y.A WHERE X.B = 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)
与
SELECT * FROM X INNER JOIN Y ON X.A = Y.A AND X.B = 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)
我意识到这并不适用于所有情况,但我注意到在某些情况下,通过将过滤条件放在JOIN语句中似乎可以获得性能提升.但是,因为它是JOIN语句的一部分,所以它也会使它表现得有些奇怪.
思考?
我有时在具有大量连接的查询中执行此操作,因为它在查询的一部分中将所有关于连接的信息本地化,而不是在连接条件中有一些,而在where子句中有一些.
对于INNER JOIN查询,这些过滤器的性能特征将取决于许多因素 - 表的大小,索引,查询的选择性以及特定于执行查询的RDBMS的其他因素.
在LEFT和中RIGHT OUTER JOIN,过滤器的位置远远超过INNER JOIN,因为它影响是否将在(JOIN子句)之前或之后(WHERE子句)之前应用连接.
| 归档时间: |
|
| 查看次数: |
2706 次 |
| 最近记录: |