Statistics 01: A Tale of Two Plans

www.youtube.com

概要
  • プランA:clustered index scanと、プランB:index seek + key lookupのどちらがよいかは、場合による。
  • パラメータに0を設定したクエリAで選択されるプランAは、行数予測がほぼ正確。8.1秒で実行された。
  • パラメータに238を設定したクエリBで選択されるプランBは、1行hitする予測だが、実際は46行。46倍の差異があるが最適化の視点からは差がない。60msで実行された。
  • これ、オプティマイザが行数の予測に失敗して逆のプランを選択した場合、たいへんなことになる。
  • クエリBをプランA(clustered index scan)で実行すると、1.8秒かかる。
  • クエリAをプランB(index seek + key lookup)で実行すると、18.5秒かかる。
  • つまり、行数予測を間違った結果はdisasterになりうる。
  • パラメータスニフィングで上記の問題が起きることがある。パラメータスニフィングについては、プランの再利用ができるのでいいものだとされているが、ろくな話を聞かない。