比方說,有一個叫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) –