テーブルInventory_Break
がIR_ID
(int)にパーティション化されています。また、テーブルにIR_ID
の非クラスター化インデックスを作成しました。
私が以下を実行すると:
SELECT *
FROM dbo.INVENTORY_BREAK
WHERE IR_ID IN ( 100, 101, 102 )
次の実行プランを取得します。
テーブルスキャン(HEAP)と記載されています。パーティションテーブルのコンテキストでそれが何を意味するのかよくわかりません。また、どのような種類のインデックスも使用していることはわかりません。それでも、クエリはかなり高速に返されるため、必要です(たとえば、テーブルには600万行があります)。
だから、私の質問は次のとおりです。
クエリdidパーティションの削除を行います。
ツールチップを見ると、実際のパーティション数は3と表示されています。これは、3つのパーティションにアクセスしたことを意味します。 (Seek Predicateセクションでもこれを確認します。)
テーブルスキャンとして表示される理由は、パーティションが削除されたテーブルスキャンであるためです。他にどう説明したらいいのかわからない。
これにはインデックスは使用されませんでした。テーブルのパーティション分割は、インデックスよりもデータベースの内部構造の奥深くに実装されているため、パーティションの削除は本質的に非常に効率的です(指定した適切な述語が与えられた場合)。
とは言うものの、あなたが与えた述語はパーティションの除去にのみ適しており、(おそらく)あまり選択的ではないので他にはあまり適していません。これらのパーティションのすべての行が必要な場合、これはすでに最適なソリューションに近いです。通常、有用なクラスター化されたインデックスを作成することをお勧めします。