我有一个包含以下三个索引的表:
索引编号1:
CREATE NONCLUSTERED INDEX [IDX_1]
ON [dbo].[TABLE] ([A] ASC, [B] ASC, [C] ASC)
索引编号2:
CREATE NONCLUSTERED INDEX [IDX_2]
ON [dbo].[TABLE] ([A] ASC, [B] ASC)
索引编号3:
CREATE NONCLUSTERED INDEX [IDX_3]
ON [dbo].[TABLE] ([C] ASC, [B] ASC, [A] ASC)
如果我的谦虚理解是正确的,那么以下是:
我可以删除IDX_2
,因为IDX_1
完全包含在IDX_1
中(同一列中的相同列)。
IDX_3
和IDX_1
不一样。 A
可用于针对列A
的查询,也可用于针对列B
和列IDX_3
的查询。另一方面,C
可用于针对列C
或列B
和A, B, C
的查询。这两个索引对于针对所有三列IDX_2
的查询都是有用的。
IDX_3
和IDX_1
涵盖A
。对于列A
或列B
和IDX_2
IDX_3
的查询将被使用,并且可以使用针对所有三列IDX_1
的查询。因此,删除user
。
提前致谢, 马尔特
答案 0 :(得分:3)
在你的所有问题中,我会删除idx_2,因为Indx_1
是多余的对于问题2和3,其中包含以下索引,如果您的查询遵循以下某些特定模式,则它们不是多余的
indx-2 CREATE NONCLUSTERED INDEX [IDX_1] ON [dbo].[TABLE] (
[A] ASC,
[B] ASC,
[C] ASC)
indx-3 CREATE NONCLUSTERED INDEX [IDX_3] ON [dbo].[TABLE] (
[C] ASC,
[B] ASC,
[A] ASC)
下面的查询可以有效地使用indx2,但不能使用index3
select a,b,c from table where a=20 and b=40 and c>40
下面的查询可以有效地使用index3,但index2没有多大帮助
select a,b,c from table where c=20 and b=40 and a>90
如果您的查询不遵循此模式,并且如果他们所做的只是搜索相等,那么其中一个是多余的