回答:
統計は、クエリオプティマイザーがより適切な意思決定を行うのを支援する動的なメタデータの形式です。たとえば、テーブルに行が12個しかない場合、ルックアップを行うためにインデックスに行く意味はありません。あなたは常にフルテーブルスキャンを行う方が良いでしょう。しかし、その同じテーブルが100万行に成長した場合、おそらくインデックスを使用するほうがよいでしょう。ただし、一意の値が非常に少ない列(たとえば、「M」または「F」のみを含む「性別」列など)でそのテーブルをクエリする場合、実際にはFTSの方がその場合よりも優れている可能性がありますとにかくブロックを取得して結果セットを作成する必要があります。ここで、テーブルが99% "M"で1% "F"であるとすると、あるケースではFTSを使用するか、別のケースではインデックスを使用する必要があります。同じテーブル、同じクエリ、テーブルの内容に応じて、潜在的に4つの異なるクエリプラン。これらの種類は「統計」であり、各データベースに固有です-同じテーブルとインデックス構造を持つ2つのデータベースでさえ、異なる統計を持ちます。
要約すると、最新のデータベースエンジンには2種類のクエリ最適化があります。SQLの書き換え(コンパイラがCを書き換えてより効率的にするようなルールベースの最適化)とデータの正しいパスの選択(コストベースの最適化) 、実行時にホットスポットを識別するJITコンパイラのように)。これは、クエリオプティマイザーが明らかに間違っていることを発見した場合(たとえば、インデックスが優れていることがわかっているときにFTSを選択する場合)にのみ心配する必要があります。
それらはれるクエリオプティマイザによって使用されるインデックスおよび/または列の値の分布を追跡する(MSDNのホワイトペーパー)。