テーブル値関数からいくつかの行を選択していますが、クエリに SELECT TOP を入れると、説明のつかない大きなパフォーマンスの違いが見つかりました。
SELECT col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
完了するまでに 5 ~ 6 分以上かかります。
でも
SELECT TOP 6000 col1, col2, col3 etc
FROM dbo.some_table_function
WHERE col1 = @parameter
--ORDER BY col1
約4、5秒で完了します。
返されたデータのセットが膨大であったとしても、これは驚くことではありませんが、関連する特定のクエリは 200,000行から5,000 行を返します。
そのため、どちらの場合も、SQL Server が 6000 行を最後まで検索し続けるため、テーブル全体が処理されますが、到達することはありません。では、なぜ大きな違いがあるのでしょうか。これは、SQL Server が結果セットのサイズを見越してスペースを割り当てる方法と関係がありますか (TOP 6000 により、メモリ内でより簡単に割り当てられる要件が低くなります)。他の誰かがこのようなことを目撃しましたか?
ありがとう