web-dev-qa-db-ja.com

「統計の作成」はSQLServer 2005で何をしますか?

Database Tuning Advisorは、データベースに一連の統計を作成することを推奨しています。私はSQLn00bのようなものなので、このような生き物に出会ったのはこれが初めてでした。 MSDNのエントリは少し鈍感でした-誰かがこれが正確に何をするのか、そしてなぜそれが良い考えであるのか説明できますか?

43
Electrons_Ahoy

コストベースのクエリ最適化 は、ヒストグラムと行数を使用して、クエリプランの実行コストをヒューリスティックに推定する手法です。 SQL Serverにクエリを送信すると、クエリが評価され、一連の クエリプラン が生成されます。このために、ヒューリスティックを使用してコストを見積もります。次に、最も安価なクエリプランを選択します。

統計は、クエリオプティマイザーがクエリプランのコストを計算するために使用します。統計が欠落しているか古くなっている場合、計画を見積もるための正しいデータがありません。この場合、中程度または高度に最適ではないクエリプランを生成できます。

SQL Serverは(ほとんどの状況で)ほとんどのテーブルとインデックスの統計を自動的に生成しますが、これらを補足したり、強制的に更新したりできます。クエリ調整ウィザードは、おそらく、統計を追加する必要があるクエリ内で、欠落している統計または識別された結合を検出しました。

統計は、クエリに特定のインデックスを使用するかどうかを決定するためにオプティマイザによって使用されます。統計がないと、オプティマイザーは特定の条件に一致する行の数を知る方法がないため、「多くの行」の場合に最適化する必要があり、最適ではない可能性があります。

8
Jonathan Rupp

一言で言えば、それはあなたのデータベースが効果的に機能するように準備します。統計を準備することにより、データベースは(実行プランを把握する必要がある前に)最も効率的なルートである可能性が高いものを認識します。

3
nathaniel

基本的に、SQLは、使用しているインデックスの種類、行数などで更新されます。これにより、SQLはクエリの実行方法をより正確に見積もることができます。統計を最新の状態に保つことは良いことです。

2
Kevin Fairchild

BOLから...

テーブルまたはインデックス付きビューの指定された列または列のセットに対して、ヒストグラムおよび関連する密度グループ(コレクション)を作成します。文字列要約統計量は、char、varchar、varchar(max)、nchar、nvarchar、nvarchar(max)、text、およびntext列に基づいて作成された統計にも作成されます。クエリオプティマイザは、この統計情報を使用して、データを取得または更新するための最も効率的なプランを選択します。最新の統計により、オプティマイザーはさまざまなクエリプランのコストを正確に評価し、高品質のプランを選択できます。

2
Galwegian