SQLサーバーが「統計の自動作成」を「オフ」に設定してクエリプランを生成する方法を知りたいのですが。
答えを検索しているときに、下のリンクで下のコンテキストに出くわしました(申し訳ありませんが、検索しましたが、これ以上良いものは見つかりませんでした)。
https://www.simple-talk.com/sql/performance/execution-plan-basics/
テーブル変数には統計情報が生成されないため、実際のサイズに関係なく、オプティマイザは常に1行であると想定します
上記はテーブル変数にのみ当てはまりますが、SQL Serverは同じ原理を使用してテーブルのクエリプランを導出すると考え、小規模なテストを行うことにしました。
PROCキャッシュをクリアし、100万レコードのテーブルで以下のクエリを実行しました
私のテストは私が間違っていることを証明し、SQLサーバーは統計が欠落していることを報告しました(予想どおり)。クエリオプティマイザーは、統計なしでこの値をどのように考え出しましたか?
テーブル変数は別の話です。統計がないときにサーバーが使用するのは、不明な入力の推定です:
したがって、あなたのケースでは、推定はselect power(1000000、0.75)= 31622(= 2014より前の一意でない列を持つ述語)になります。
関連書籍: Itzik Ben-GanによるT-SQLクエリ