假设有一个名为 T1 的表
CREATE TABLE T1
(
GID INT NOT NULL,
Attrib1 BIT NOT NULL,
Attrib1Date DATE NOT NULL,
Attrib2 BIT NOT NULL,
CONSTRAINT PK_T1 PRIMARY KEY (GID)
)
现在,我正在为查询创建索引,其中只有 Attrib1 等于 1 或 Attrib2 等于 1 的行是有趣的。假设只有 20% 的行是这样的。
请不要担心 Attrib1 与 Attribe2 的关联——它们仅针对两个单独的示例给出。
使用过滤索引很明显——我的意思是:带有 WHERE 子句的 INDEX-es。但问题是要包括哪些列?
示例查询:
SELECT * FROM T1 WHERE Attrib1 = 1 ORDER BY Attrib1Date
SELECT * FROM T1 WHERE Attrib2 = 1
示例和问题 1)
哪个索引更正确?
CREATE NONCLUSTERED INDEX IX_Attrib1
ON T1 (Attrib1, Attrib1Date)
WHERE Attrib1 = 1
或者
CREATE NONCLUSTERED INDEX IX_Attrib1
ON T1 (Attrib1Date, Attrib1)
WHERE Attrib1 = 1
或者
CREATE NONCLUSTERED INDEX IX_Attrib1
ON T1 (Attrib1Date)
WHERE Attrib1 = 1
示例和问题 2)
构建仅包含过滤列的过滤索引是否正确,例如:
CREATE NONCLUSTERED INDEX IX_Attrib2
ON T1 (Attrib2)
WHERE Attrib2 = 1