2 つのクエリUNION
間に重複する要素がないことを既に知っているように、一緒に使用している 2 つのクエリがあります。したがって、UNION
とUNION ALL
は同じ結果を生成します。
どちらを使用する必要がありますか?
2 つのクエリUNION
間に重複する要素がないことを既に知っているように、一緒に使用している 2 つのクエリがあります。したがって、UNION
とUNION ALL
は同じ結果を生成します。
どちらを使用する必要がありますか?
探しているものの意図に一致するものを使用する必要があります。重複がないことを確認したい場合は を使用しUNION
、それ以外の場合は を使用しますUNION ALL
。データが現在同じ結果を生成するからといって、常にそうであるとは限りません。
とUNION ALL
はいえ、適切なデータベース実装ではより高速になります。例については、以下の記事を参照してください。ただし、通常は、UNION
同一の行を削除するための追加の手順を実行することを除いて同じであり (予想されるように)、それが実行時間を支配する傾向があります。
この質問にPERFORMANCEのタグを付けたようですので、それが主な考慮事項だと思います。
UNION ALL
UNION
SQLは2つのセットの重複をチェックする必要がないため、絶対にパフォーマンスが向上します。
重複チェックを実行するためにSQLが必要でない限り、常にを使用してくださいUNION ALL
。
UNION ALL
とにかく使います。データベースサーバーエンジンによっては、重複が発生しないことはわかっていても、それがわからない場合があります。
したがって、DBサーバーに追加情報を提供するために、クエリプランナーが(おそらく)より適切な選択をするために、を使用しますUNION ALL
。
そうは言っても、DBサーバーのクエリプランナーが句とテーブルのインデックスからその情報を推測するのに十分賢いUNION
場合、結果(パフォーマンスとセマンティックに関して)は同じであるはずです。
いずれの場合も、使用しているDBサーバーに大きく依存します。
http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/によると、少なくともパフォーマンスについては、UNIONを使用する方が適切です。 ALL、重複を積極的に区別しないため、より高速です
2 つの重複は存在しないため、UNION ALL を使用します。重複をチェックする必要はなく、UNION ALL はタスクをより効率的に実行します。