SQL Server交叉连接与where语句和内部连接中的条件与join的on语句中的条件的性能比较

时间:2009-11-02 22:42:59

标签: sql-server-2005 cross-join

我正在尝试确定在SQL Server 2005中运行的一段生成的SQL的性能。

它使用CROSS JOINS,但绑定交叉连接表的条件在where语句中。

我以前认为所有交叉联接都有哪些语句会首先拉出完整的笛卡尔积,然后应用过滤器。

但是,MSDN上的以下链接表明不同。

https://msdn.microsoft.com/en-us/library/ms190690.aspx

它明确指出,如果交叉连接表存在条件,它将“表现”为内连接。它继续显示内连接和交叉连接的类似结果的示例,其中有条件。

它没有说明性能差异是什么,只是它们的行为方式类似。

2 个答案:

答案 0 :(得分:1)

可能最简单的方法是显示语句的执行计划,并查看它正在做什么。你可以从管理工作室做到这一点 - 这里有更多的信息:

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx

答案 1 :(得分:1)

The example given is correct, atleast in a basic query. 

以下查询将为两个查询生成相同的执行计划和执行时间。在连接操作期间,Sql Optimiser通常可以自由地在where子句和'on'子句之间移动限制,并且我认为交叉连接也是如此。

    select companies.id, contacts.id
from 
companies
cross join contacts
where
contacts.companyid = companies.id


select companies.id, contacts.id
from 
companies
inner join contacts on contacts.companyid = companies.id