在SQL中使用多个连接时,是否可以更快地将所有内容连接到表A,或将表A连接到表B,将表B连接到表C等?

时间:2015-07-01 19:09:59

标签: sql sql-server join

为了帮助澄清,这里有一些代码:

方法1

SELECT * FROM tableA a  
JOIN tableB b ON a.id=b.id  
JOIN tableC c ON a.id=c.id   
JOIN tableD d ON a.id=d.id   

方法2

SELECT * FROM tableA a      
JOIN tableB b ON a.id=b.id  
JOIN tableC c ON b.id=c.id  
JOIN tableD d ON c.id=d.id  

1 个答案:

答案 0 :(得分:0)

没有差异

请记住,数据库是基于数学集理论的。就集合论而言,这些联接是平等的。

因此,如果查看实际的查询执行计划,您将看到SQL服务器甚至正在重新组织联接,并且可能会以完全不同的方式重新排列它们。

例如,如果一个表只包含10个记录,那么这个表通常用于第一个连接,因为通过仅删除5个记录,您可以减少整个结果集的50%。

数据库正在维护有关记录数量和内容分布的一些统计信息。通过这些统计信息,查询引擎可以非常好地“猜测”哪个顺序是最快的。

您可以使用查询提示来影响此行为,但这仅在极少数情况下有用。