1

現在、行がゼロのテーブルがありますが、1年で400万から500万に増加します。biglogidは、「COMB GUID」を使用して、テーブル/インデックスが断片化しないようにしています。行が追加されると、rowstateの値は1になります。ただし、行が不要な場合は、nullに設定されます(毎年のクリーンアップ、ビジネスルール以外は削除できません)。これは、最終的にnull以外の列よりもnullが多くなることを意味するため、rowstate列はスパースになります。

テーブルからの選択は、「biglogid =......およびrowstateがnullではないbiglogからlogtextを選択する」であり、アクティブな場合にのみ値を取得します。それがテーブルに対して実行される唯一の実際のクエリである場合、PKをフィルタリングされたインデックスにすることに価値はありますか?もしそうなら、そのためのTSQL構文は何ですか?

ありがとう。

CREATE TABLE biglog(
    biglogid [uniqueidentifier] NOT NULL,
    logtext [varchar](400) NOT NULL,
    rowstate [tinyint] SPARSE  NULL,
 CONSTRAINT biglogpk PRIMARY KEY CLUSTERED 
(
    biglogid ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 85) ON [PRIMARY]
) ON [PRIMARY]
4

1 に答える 1

2

PKでフィルタリングされたインデックスを定義することはできません。次のインデックスは役に立ちますか?

CREATE NONCLUSTERED INDEX MyIndex
    ON biglog(logtext)
    WHERE rowstate IS NOT NULL ;
于 2012-05-24T18:54:18.473 に答える