WHERE フィルターに完全なクエリ条件が含まれるように、フィルター選択されたインデックスを作成しています。このようなインデックスを使用すると、SQL ではキー列を追加する必要がありますが、キー列は不要になるようです。たとえば、次の表を考えてみましょう。
CREATE TABLE Invoice
(
Id INT NOT NULL IDENTITY PRIMARY KEY,
Data VARCHAR(MAX) NOT NULL,
IsProcessed BIT NOT NULL DEFAULT 0,
IsInvalidated BIT NOT NULL DEFAULT 0
)
テーブルに対するクエリは、処理する新しい請求書を探します。つまり、次のようになります。
SELECT *
FROM Invoice
WHERE IsProcessed = 0 AND IsInvalidated = 0
したがって、フィルター処理されたインデックスを使用してこれらのクエリを調整できます。
CREATE INDEX IX_Invoice_IsProcessed_IsInvalidated
ON Invoice (IsProcessed)
WHERE (IsProcessed = 0 AND IsInvalidated = 0)
GO
私の質問: キー列は何にする必要がありIX_Invoice_IsProcessed_IsInvalidated
ますか? おそらくキー列は使用されていません。私の直感では、小さくてインデックス構造を比較的フラットに保つ列を選択することにしました。テーブルの主キー ( Id
) を選択する必要がありますか? フィルター列の 1 つ、または両方ですか?