結合または結合すべてに、それが問題です
-
29-09-2019 - |
質問
私は2つのクエリを持っています UNION
一緒になって、2つのクエリの間に重複する要素がないことをすでに知っています。したがって、 UNION
と UNION ALL
同じ結果が生成されます。
どちらを使用すればよいですか?
解決
探しているものの意図に一致するものを使用する必要があります。複製の使用がないことを確認したい場合 UNION
, 、それ以外の場合は使用します UNION ALL
. 。データが同じ結果を生成するからといって たった今 常にそうなるという意味ではありません。
そうは言っても UNION ALL
SANEデータベースの実装では高速になります。例については、以下の記事を参照してください。しかし、通常、それを除いて同じです UNION
同一の行を削除するための追加のステップを実行します(予想されるかもしれません)、実行時間を支配する傾向があります。
他のヒント
この質問パフォーマンスにタグを付けたことがあるので、それがあなたの主な考慮事項だと思います。
UNION ALL
絶対にアウトパフォームします UNION
SQLはDUPの2つのセットを確認する必要はないためです。
重複するチェックを実行するためにSQLが必要な場合を除き、常に使用してください UNION ALL
.
によると http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/ 少なくともパフォーマンスのためには、積極的に明確な複製をしていないので、より速いので、組合全員を使用する方が良いです
私は使うだろう UNION ALL
とりあえず。それでも 君 データベースサーバーエンジンに応じて、複製はないことを知っているかもしれませんが、それはわからないかもしれません。
したがって、クエリプランナーがより良い選択をするために、DBサーバーに追加の情報を提供するためだけに(おそらく)使用してください UNION ALL
.
そうは言っても、もしあなたの場合 DBサーバーのクエリプランナーは、からの情報を推測するのに十分賢いです UNION
節とテーブルのインデックス、結果(パフォーマンスとセマンティックワイズ)は同じでなければなりません。
どちらの場合も、それは強く依存します DBサーバー あなたは使用しています。
2つの使用ユニオンすべてから重複がないためです。重複を確認する必要はなく、組合はすべてタスクをより効率的に予定します。