2

重複の可能性:
明示的SQL結合と暗黙的SQL結合

SQLServerに2つのクエリがあります。

最初のクエリ:

Select * 
From Stack, Overflow
Where Stack.Id = Overflow.StackId

2番目のクエリ:

Select * 
From Stack 
Inner Join Overflow On Overflow.StackId = Stack.Id

これらの2つのクエリは、同じ結果を返します。

では、パフォーマンスの観点から、この2つのクエリの違いは何ですか?

そして、あなたはどちらが好きですか?

4

2 に答える 2

3

クエリ #2 を使用します。これは適切なANSI/ISO SQL 標準 JOIN構文であり、#1 よりも優先されます。

1つは、JOIN条件が所属する場所であり、句JOINが散らかっていないことです。WHEREWHEREには、結果セットを制約するために実際に使用するもののみを含める必要があります。

そして第二に、JOIN で条件を定義する必要がJOINあるため、それを「忘れる」可能性が低くなり、不必要にデカルト積が生成されます。

INNER JOIN最後に、 orを定義するLEFT OUTER JOINと、クエリが読みやすくなり、理解が容易になります。他の誰かがクエリを見て、6 か月後に戻ってコードを維持する必要がある自分のために。

于 2012-08-08T15:20:05.770 に答える
2

違いは、最初のクエリが2 つのテーブルを暗黙的に結合しているのに対し、2 番目のクエリは 2 つのテーブルを明示的に結合していることです。

2つのテーブルがどのように結合されているかを正確に述べいるという理由だけで、私は2番目のものを好みます。あなたも最初のものにいると思いますが、クエリが大きくなるにつれて、読みにくくなります。

パフォーマンスは、主にテーブルのインデックスに依存します。

于 2012-08-08T15:15:12.877 に答える