n個のクエリq1、q2、q3 ... qnがあり、それぞれが実行時間としてt1、t2、t3...tnを実行している場合。
また、別のクエリがありますq1 UNION ALL q2 UNION ALL q3 .... UNIONALLqnおよび実行時間はtuです
tuとt1+t2 + t3 + ... + tnを比較してください。理論的にはどちらが速いですか?実験をすることが最良の方法だと知っていますが、理論について専門家の声を聞く必要があります。ありがとう
オペレーターは、UNION
行が返される前に、重複するタプル(行)を結果セットから削除する必要があります。これは事実上、SORTUNIQUE操作です。これは、小さな結果セットの場合は比較的安価ですが、大規模なセットの場合は、サーバー時間にリソースを大量に消費する可能性があります(つまり、長い時間がかかります)。
理論的には、クエリを個別に実行するのではなく、データベースへのラウンドトリップ( n -1)を排除するため、クエリをUNION ALL
演算子ではなく演算子と組み合わせるのが最も高速です。ただし、nの値が大きい場合は、SQLテキストのサイズ(最大パケットサイズ)に実際的な制限が発生します。UNION
演算子クエリと個別クエリのどちらかを選択するUNION
と、結果セットが大きい場合、個別クエリはサーバー側でのリソース消費量が少なくなります。
要するに、これは実際には、各クエリの重労働とSORTUNIQUE操作の重労働との間のトレードオフです。
n個のサブクエリをn個の選択として実行できるためUNION ALL
、スマートDBMSは、最大でn個の個別の選択と同じ作業を実行できるはずです。
これにより、往復時間が残ります。これはn * rtt
、n個rtt
のクエリとUNION ALL
。
UNION ALL
理論的には、スマートDBMSは、常にn個の個別のクエリよりも速く単一のクエリに応答する必要があります。
実際には、いつものように、すべての賭けはテストなしでオフになります。