FAQ: TOP に指定した数よりも結果が少ない場合にクエリの実行時間が長くなる

神谷 雅紀
Escalation Engineer

質問

TOP n を指定したクエリを実行した場合、WHERE 句に指定される条件によってクエリの結果行数は変わるが、結果が n 行の場合 (つまり、条件に該当する行が n 行以上ある場合) に比べて、n 行未満の場合には実行時間が長くなります。なぜですか?

クエリ条件を満たす行が TOP に指定されている行数未満の場合に実行時間が長くなる理由

クエリ条件を満たす行が TOP に指定されている行数未満である場合には、クエリ条件に該当するすべての行が処理対象になります。一方、クエリ条件に該当する行が TOP に指定されている行数以上ある場合には、クエリ条件に該当する行すべてを処理する必要はなく、TOP に指定されている行数分の結果が得られた時点で処理は終了します。そのため、結果行数が TOP に指定されている行数未満である場合は、TOP に指定されている行数以上の場合よりも実行時間が長くなります。

実際には、クエリ条件を満たす行が TOP に指定されている行数未満である場合に遅いのではなく、TOP に指定されている行数以上ある場合に処理が速いのであり、それが TOP が導入された目的です。

image