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