web-dev-qa-db-ja.com

SQLサーバーが統計の自動作成をオフに設定してクエリプランを生成する方法

SQLサーバーが「統計の自動作成」を「オフ」に設定してクエリプランを生成する方法を知りたいのですが。

答えを検索しているときに、下のリンクで下のコンテキストに出くわしました(申し訳ありませんが、検索しましたが、これ以上良いものは見つかりませんでした)。

https://www.simple-talk.com/sql/performance/execution-plan-basics/

テーブル変数には統計情報が生成されないため、実際のサイズに関係なく、オプティマイザは常に1行であると想定します

上記はテーブル変数にのみ当てはまりますが、SQL Serverは同じ原理を使用してテーブルのクエリプランを導出すると考え、小規模なテストを行うことにしました。

PROCキャッシュをクリアし、100万レコードのテーブルで以下のクエリを実行しました

enter image description here

enter image description here

私のテストは私が間違っていることを証明し、SQLサーバーは統計が欠落していることを報告しました(予想どおり)。クエリオプティマイザーは、統計なしでこの値をどのように考え出しましたか?

6
Midhun C N

テーブル変数は別の話です。統計がないときにサーバーが使用するのは、不明な入力の推定です: unknowns

したがって、あなたのケースでは、推定はselect power(1000000、0.75)= 31622(= 2014より前の一意でない列を持つ述語)になります。

関連書籍: Itzik Ben-GanによるT-SQLクエリ

10
sepupic