1

私はカラムをXで区切ったテーブルを持っています。しかし、SSMSは欠落インデックス(インパクト80.23)が表示されます。次のクエリSSMSは、パーティション化された列にMissing Indexのメッセージを表示するのはなぜですか?

select count(*) from table where X = 'xxx' 

のために[DBO] [表]([X])に[]非クラスタ化インデックスを作成したインデックスを作成することが依然として必要ですパーティション化された列X?そして、それは大きなテーブルで低密度になります。

編集:
私はselect max(x) from tableしようとしました。インデックスがXである非パーティション表で同様のSQLを実行するよりも時間がかかります。 show statistics IO onを有効にした後、パーティション化されたテーブルのクエリ(X上のインデックスなし)は、インデックスを持つ非パーティション化テーブル(スキャン回数:1)よりもはるかに多くのスキャンカウント(170)と論理読み取り 、論理読み取り:4)。

答えて

1

This is a feature of SSMSこのクエリでは、クエリに役立つインデックスが推奨されています。 limitations documented hereに注意してください。 indexes and partitioningのドキュメントがあります。

SQL Serverはパーティションの削除を使用して、パーティション化されたオブジェクトに対するクエリを高速化し、結果に必要なデータを含むパーティションにのみアクセスします。パーティションの削除を行うには、SQL Serverはアクセスする必要があるパーティションの数を知る必要があります。 SQL Server 2005では、この列挙はネストされたループ結合と各パーティションのスキャン/シークを使用して行われます。 SQL Server 2008では、パーティション化されたテーブルにアクセスするための実行計画は、パーティション化されていないテーブルの実行計画とほとんど同じです。

私のテストでは、SQL Server 2005の実行計画では、パーティション化された列にインデックス(クラスタ化または非クラスタ化)を使用する利点がありました。 SQL Server 2008の実行計画が変更され、クラスタ化インデックスの検索が表示されましたが、パーティション化された列のインデックス作成の有無にかかわらず、コストは同じでした。しかし、このpartitioning seeksの記事では、スキップスキャンについて説明しています。これは、where句で参照されるパーティション化された列と列が同じ場合に、データ取得を高速化(およびコスト削減)します。

SQL Server 2005 partitioning,SQL Server 2008 partitioningおよびSQL Server 2008 partitioning seeksです。

+0

ありがとうございました。しかし、文書化された制限にはパーティション化については何も言及されていません。 – ca9163d9

+0

パーティション化と索引付けのリンクを使用して応答するように更新されましたが、探しているものがわかりません...元の質問は、索引メッセージの欠落がわからないということでした。これはパーティション分割についてのあなたのコメントと相違しているようですので、何が問題なのですか? – Bryan

+0

なぜパーティション化された列にインデックスが必要なのかという疑問があります。それは自然に不要です。 – ca9163d9

関連する問題