比方说,有一个叫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的相互作用 - 它们只给出两个单独的例子。
很明显,使用过滤索引 - 我的意思是:INDEX -ES与WHERE子句。但问题是包含哪些列?
示例查询:
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
OR
CREATE NONCLUSTERED INDEX IX_Attrib1
ON T1 (Attrib1Date, Attrib1)
WHERE Attrib1 = 1
OR
CREATE NONCLUSTERED INDEX IX_Attrib1
ON T1 (Attrib1Date)
WHERE Attrib1 = 1
实施例和问题2)
是否正确建立由仅含柱过滤索引进行过滤,像:
CREATE NONCLUSTERED INDEX IX_Attrib2
ON T1 (Attrib2)
WHERE Attrib2 = 1
(http://stackoverflow.com/q/10897198/73226) –