0
根據不同條件爲同一列創建多個過濾索引是否合理?例如,假設以下內容:同一列的多個過濾索引
CREATE TABLE [dbo].[Skills](
[UserId] INT NOT NULL PRIMARY KEY,
[SkillTitle] NVARCHAR(50) NOT NULL,
[SkillLevel] INT NOT NULL CHECK ([SkillLevel] BETWEEN 0 AND 10)
)
GO
CREATE INDEX [IX_Skill_Low] ON [dbo].[Skill] (SkillTitle,SkillLevel) WHERE SkillLevel BETWEEN 3 AND 0
GO
CREATE INDEX [IX_Skill_Moderate] ON [dbo].[Skill] (SkillTitle,SkillLevel) WHERE SkillLevel BETWEEN 5 AND 3
GO
CREATE INDEX [IX_Skill_Good] ON [dbo].[Skill] (SkillTitle,SkillLevel) WHERE SkillLevel BETWEEN 7 AND 5
GO
CREATE INDEX [IX_Skill_High] ON [dbo].[Skill] (SkillTitle,SkillLevel) WHERE SkillLevel > 7
或者創建單個非過濾索引會更好嗎?
如果進行以下查詢,會發生什麼SELECT * FROM Skills WHERE SkillLevel BETWEEN 7 AND 1
?
「如果您的選擇*包含很多列以外的索引中沒有被指定」我不明白這部分,你能解釋一下嗎?簡單嗎?它是'除了哪個沒有指定'或'哪個是'??無法理解那部分。例如 – Arrrr
(對你的表不適用),如果你的表中有列a,b,c,d,並且你的索引就像'on dbo.table(a,b)',那麼你的'select *'查詢可能無法利用這個指數 – TheGameiswar
我不知道這一點,謝謝提及。如果您示例中的「c」列是主鍵或唯一索引,該怎麼辦? – Arrrr