SQLを初めて実行するときだけ、やたら重いという経験ありませんでしょうか?
同じSQLの2回目以降の実行はめちゃ速いのに。。。みたいな。
まさにその状況が発生したのですが、「統計情報の自動作成」が原因でした。
(業務で使用するSQLのため載せられませんが、ちょっと複雑なSELECT文です。)
アドホッククエリなので初回のコンパイル時間も疑ってみましたが、option(recompile)つけても高速でした。(もちろんクエリキャッシュにヒットするよりはコンパイルの分だけ時間かかりますが、気にならない程度でした)
SqlServerProfiler でのキャプチャ結果
このAuto Stats(統計情報の自動更新)が走るとどうなるかというと、該当のテーブルの統計に新しい統計情報が作成されます。(「_WA_Sys_00000008_0T12DVFAG」 みたいなやつ)
SQLの述語の中で使われているカラムに対して自動作成されるっぽいです。
が、_WA系の統計が作成されるのは無駄、という意見もあるようです(http://ryuchan.hatenablog.com/entry/2014/03/23/184242)
ためしにAuto Statsおきないように設定変えてから、同様のクエリを実行したところ一回目から高速でした。なので確かに_WA系の統計はいらないのかも。。。少なくとも、統計情報は非同期更新されるように設定しておいたほうが良いのかもしれません。
とにかく原因は分かったので、これでクエリの初回実行時にめちゃくちゃ時間かかっても焦ることはなくなりそうです!
_Waな統計に関する情報は以下が詳しそうでした。(深堀するとどうしても日本語の文献が少ない。。。)
https://www.mssqltips.com/sqlservertip/2734/what-are-the-sql-server-wasys-statistics/