0

理論的には、両方のクエリが同じ結果セットを返すという事実を考えると、内部結合が外部結合よりも著しく速く動作するのはなぜでしょうか。説明に時間がかかるクエリがありましたが、これは単一結合の変更を見たものです: 左外部結合 - 6 秒、内部結合 - 0 秒 (残りのクエリは同じです)。結果セット: 同じ

4

2 に答える 2

1

実際にはデータによっては、左外部結合と内部結合は同じ結果を返さないでしょう..ほとんどの場合、左外部結合はより多くの結果を持ち、再びデータに依存します..

于 2012-04-16T14:36:39.563 に答える
0

左結合を内側結合に変更しても、結果に違いはないのではないかと心配です。where句のテーブルの左側に、効果的に(そしておそらく誤って)それを内部結合に変換する条件があるのではないかと思います。

何かのようなもの:

select * 
from table1 t1
left join table2 t2 on t1.myid = t2.myid
where t2.somefield = 'something'

これはと同じものではありません

select * 
from table1 t1
left join table2 t2 
on t1.myid = t2.myid and t2.somefield = 'something'

そのため、最初はクエリが正しくないのではないかと心配し、次にパフォーマンスについて心配します。内部結合は、左結合のパフォーマンスの向上ではありません。これらは2つの異なる意味を持ち、すべてのレコードに常に一致するテーブルがない限り、異なる結果を返す必要があります。この場合、パフォーマンスを向上させないためにもう一方が正しくないため、内部結合に変更します。

左結合に時間がかかる理由についての私の最も良い推測は、それがさらに多くの行に結合し、where句によってフィルターで除外されることです。しかし、それは単なる推測です。知るには、実行計画を確認する必要があります。

于 2012-04-16T15:05:09.653 に答える