Sql 哪个连接速度更快:1键&x2B;硬编码vs 2键
我只是想知道哪个加入会更快 通常,表A的2个键列与表B的2个键列连接,所有键列都被索引 基于百万行级别的两个表 应该是这样的:Sql 哪个连接速度更快:1键&x2B;硬编码vs 2键,sql,sql-server,join,left-join,Sql,Sql Server,Join,Left Join,我只是想知道哪个加入会更快 通常,表A的2个键列与表B的2个键列连接,所有键列都被索引 基于百万行级别的两个表 应该是这样的: select * from A left join B on A.key1=B.key1 and A.key2=B.key2 .............. .............. 但是如果我想在key2处使用特定的键值,key2='AA'哪一个更快: 计划A: select * from A left join B on A.key1=B.k
select *
from A
left join B
on A.key1=B.key1
and A.key2=B.key2
..............
..............
但是如果我想在key2
处使用特定的键值,key2='AA'
哪一个更快:
计划A:
select *
from A
left join B
on A.key1=B.key1
and A.key2=B.key2
where A.key2='AA'
方案B:
select *
from A
left join B
on A.key1=B.key1
where A.key2='AA' and B.key2='AA'
谢谢唯一确定的方法是尝试两种方法并测量它们。这将取决于可用的索引以及优化器决定如何使用它们
如果每个表的
(key1,key2)
上都有一个复合索引,那么如果有任何差异,我希望join+过滤器会更快。如果在key1
上只有一个索引,我希望性能大致相同 这两个查询在语义上不等价
当您将LEFT JOIN
ed表中的一列放入WHERE
子句时,您将使其成为内部联接。如果B
中没有匹配的记录,您将无法从A
中获取该记录
您的选项是在WHERE
子句中使用它,就像您在第一个选项中一样,或者将它放入JOIN
:
left join B
on A.key1=B.key1
AND a.Key1 = 'AA'
…这在大多数RDBMS中也是相同的执行计划
作为可读性规则,您希望在WHERE
子句中使用此选项,因为下一个人将在该子句中查找筛选器。为什么不检查执行计划。。。。?也就是说,我认为它们都是一样的。选择查看执行计划