1

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

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

我以前认为所有具有 where 语句的交叉连接都会首先提取完整的笛卡尔积,然后应用过滤器。

但是,MSDN 上的以下链接建议不同。

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

它特别指出,如果交叉连接表上有条件,它将像内部连接一样“表现”。它继续展示了一个内部连接和带条件的交叉连接的类似结果的示例。

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

4

2 回答 2

1

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

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

于 2009-11-02T22:50:57.630 回答
1
The example given is correct, atleast in a basic query. 

下面的查询将为两个查询产生相同的执行计划和执行时间。Sql 优化器通常可以在连接操作期间在 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
于 2009-11-02T22:51:06.600 回答