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 に答える