0

n個のクエリq1、q2、q3 ... qnがあり、それぞれが実行時間としてt1、t2、t3...tnを実行している場合。

また、別のクエリがありますq1 UNION ALL q2 UNION ALL q3 .... UNIONALLqnおよび実行時間はtuです

tuとt1+t2 + t3 + ... + tnを比較してください。理論的にはどちらが速いですか?実験をすることが最良の方法だと知っていますが、理論について専門家の声を聞く必要があります。ありがとう

4

2 に答える 2

2

オペレーターは、UNION行が返される前に、重複するタプル(行)を結果セットから削除する必要があります。これは事実上、SORTUNIQUE操作です。これは、小さな結果セットの場合は比較的安価ですが、大規模なセットの場合は、サーバー時間にリソースを大量に消費する可能性があります(つまり、長い時間がかかります)。

理論的には、クエリを個別に実行するのではなく、データベースへのラウンドトリップ( n -1)を排除するため、クエリをUNION ALL演算子ではなく演算子と組み合わせるのが最も高速です。ただし、nの値が大きい場合は、SQLテキストのサイズ(最大パケットサイズ)に実際的な制限が発生します。UNION

演算子クエリと個別クエリのどちらかを選択するUNIONと、結果セットが大きい場合、個別クエリはサーバー側でのリソース消費量が少なくなります。

要するに、これは実際には、各クエリの重労働とSORTUNIQUE操作の重労働との間のトレードオフです。

于 2012-09-25T20:47:36.890 に答える
2

n個のサブクエリをn個の選択として実行できるためUNION ALL、スマートDBMSは、最大でn個の個別の選択と同じ作業を実行できるはずです。

これにより、往復時間が残ります。これはn * rtt、n個rttのクエリとUNION ALL

UNION ALL理論的には、スマートDBMSは、常にn個の個別のクエリよりも速く単一のクエリに応答する必要があります。
実際には、いつものように、すべての賭けはテストなしでオフになります。

于 2012-09-25T20:54:51.827 に答える