SQL Server中的综合索引与INCLUDE覆盖索引

时间:2010-10-07 16:59:46

标签: sql-server database-design include indexing composite

据我所知,综合指数总是从左到右使用(例如,如果指数在城市,州,WHERE City =“Blah”或WHERE City =“Blah”AND St​​ate =“AA”将正常工作但是在哪里状态=“AA”不会。)

同样的原则是否适用于INCLUDE索引?

提前致谢!

粘土

2 个答案:

答案 0 :(得分:15)

包含列只能用于向查询的SELECT部分提供列。它们不能用作过滤索引的一部分。

编辑:为了进一步澄清我的观点,请考虑以下示例:

我创建一个简单的表并填充它:

create table MyTest (
    ID int,
    Name char(10)
)

insert into MyTest
    (ID, Name)
    select 1, 'Joe' union all
    select 2, 'Alex'

现在考虑这3个索引及其相应的执行计划,用于简单的SELECT。

select ID, Name
    from MyTest
    where Name = 'Joe'

案例1 :只有ID的索引会导致TABLE SCAN。

create index idx_MyTest on MyTest(ID)

alt text

案例2 :包含姓名的ID索引。有点好,因为索引覆盖了查询,但我仍然得到SCAN操作。

create index idx_MyTest on MyTest(ID) include (Name)

alt text

案例3 :包含ID的名称索引。这是最好的。索引构建在我的WHERE子句中的列上,因此我得到了一个SEEK操作,由于包含列,索引覆盖了查询。

create index idx_MyTest on MyTest(Name) include (ID)

alt text

答案 1 :(得分:1)

不,包含字段未订购。

以下是一些额外的设计注意事项:

http://msdn.microsoft.com/en-us/library/ms190806.aspx

相关问题