データベース統計とは何ですか、またそれらからどのように利益を得ることができますか?


18

SQL Serverがデフォルトで保持する統計についての話を聞いたことがあります。それらは何を追跡しており、この情報を使用してデータベースを改善するにはどうすればよいですか?

回答:


21

統計は、クエリオプティマイザーがより適切な意思決定を行うのを支援する動的なメタデータの形式です。たとえば、テーブルに行が12個しかない場合、ルックアップを行うためにインデックスに行く意味はありません。あなたは常にフルテーブルスキャンを行う方が良いでしょう。しかし、その同じテーブルが100万行に成長した場合、おそらくインデックスを使用するほうがよいでしょう。ただし、一意の値が非常に少ない列(たとえば、「M」または「F」のみを含む「性別」列など)でそのテーブルをクエリする場合、実際にはFTSの方がその場合よりも優れている可能性がありますとにかくブロックを取得して結果セットを作成する必要があります。ここで、テーブルが99% "M"で1% "F"であるとすると、あるケースではFTSを使用するか、別のケースではインデックスを使用する必要があります。同じテーブル、同じクエリ、テーブルの内容に応じて、潜在的に4つの異なるクエリプラン。これらの種類は「統計」であり、各データベースに固有です-同じテーブルとインデックス構造を持つ2つのデータベースでさえ、異なる統計を持ちます。

要約すると、最新のデータベースエンジンには2種類のクエリ最適化があります。SQLの書き換え(コンパイラがCを書き換えてより効率的にするようなルールベースの最適化)とデータの正しいパスの選択(コストベースの最適化) 、実行時にホットスポットを識別するJITコンパイラのように)。これは、クエリオプティマイザーが明らかに間違っていることを発見した場合(たとえば、インデックスが優れいることがわかっているときにFTSを選択する場合)にのみ心配する必要があります。


2
+1これ以上説明できなかった。統計は、最新の状態に保たれている場合にのみ役立つことを覚えておくことが重要です。これは、統計の自動更新または定期的にスケジュールされた(夜間/毎週)統計更新コマンドで実行できます。また、インデックスの再構築では、統計の更新が自動的に実行されます。
マットM

5

それらはれるクエリオプティマイザによって使用されるインデックスおよび/または列の値の分布を追跡する(MSDNのホワイトペーパー)。

あなたの唯一の関心事は定期的更新することです:DBエンジンに任せるだけです


2
常にではない。統計を手動で作成すると、クエリのパフォーマンスが向上する場合があります。
mrdenny

@mrdenny:実生活でこれをどのくらいの頻度でしましたか?めったにありません。IIRCを持っていません。統計が必要な場合は、統計が必要なインデックスが必要であると主張できます。CREATE STATISTICSに従って列統計のみを作成できます。OPが統計について質問しなければならなかったことを考えると、これは公平なことだと思います。
-gbn

1
私はそれを数回やったことがありますが、そうではありません。統計の更新だけではないため、「定期的に更新することを唯一の懸念事項とする」声明に反対しました。
mrdenny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.