10

2 つのクエリUNION間に重複する要素がないことを既に知っているように、一緒に使用している 2 つのクエリがあります。したがって、UNIONUNION ALLは同じ結果を生成します。

どちらを使用する必要がありますか?

4

5 に答える 5

24

探しているものの意図に一致するものを使用する必要があります。重複がないことを確認したい場合は を使用しUNION、それ以外の場合は を使用しますUNION ALLデータが現在同じ結果を生成するからといって、常にそうであるとは限りません。

UNION ALLはいえ、適切なデータベース実装ではより高速になります。例については、以下の記事を参照してください。ただし、通常は、UNION同一の行を削除するための追加の手順を実行することを除いて同じであり (予想されるように)、それが実行時間を支配する傾向があります。

于 2010-10-11T20:12:22.020 に答える
6

この質問にPERFORMANCEのタグを付けたようですので、それが主な考慮事項だと思います。

UNION ALLUNIONSQLは2つのセットの重複をチェックする必要がないため、絶対にパフォーマンスが向上します。

重複チェックを実行するためにSQLが必要でない限り、常にを使用してくださいUNION ALL

于 2010-10-11T20:15:26.430 に答える
2

UNION ALLとにかく使います。データベースサーバーエンジンによっては、重複が発生しないことはわかっていても、それがわからない場合があります

したがって、DBサーバーに追加情報を提供するために、クエリプランナーが(おそらく)より適切な選択をするために、を使用しますUNION ALL

そうは言っても、DBサーバーのクエリプランナーが句とテーブルのインデックスからその情報を推測するのに十分賢いUNION場合、結果(パフォーマンスとセマンティックに関して)は同じであるはずです。

いずれの場合も、使用しているDBサーバーに大きく依存します。

于 2010-10-11T20:13:29.797 に答える
2

http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/によると、少なくともパフォーマンスについては、UNIONを使用する方が適切です。 ALL、重複を積極的に区別しないため、より高速です

于 2010-10-11T20:13:45.723 に答える
1

2 つの重複は存在しないため、UNION ALL を使用します。重複をチェックする必要はなく、UNION ALL はタスクをより効率的に実行します。

于 2010-10-11T20:32:33.850 に答える