2011-01-12 76 views
1

我正在寻找确认我对数据库中复合索引的理解 - 特别是与SQL Server 2008 R2有关的情况,如果这有所帮助。复合数据库索引

我想我理解索引列的顺序是至关重要的,如果我有一个索引{ [Name], [Date] },那么基于WHERE子句的基于[Date]的SELECT将无法使用索引,但索引{ [Date], [Name] }会。如果SELECT基于两列,则任一索引都可用。

是吗?使用这种复合索引的好处是,每列使用两个索引(即{ [Date] }{ [Name] })。

谢谢!

回答

3

不完全是,日期选择仍然可以使用索引,但不如包含名称的查询有效,因为名称会限制索引必须搜索多少。

如果您经常对姓名+日期和日期以及姓名分别进行查询,请为每个组合使用3个索引。

此外,索引中首次出现的各种字段也更快地限制索引搜索的速度。

你也可以包含一些列,这些数据没有被索引,但是这些数据是根据索引提取的。

+0

谢谢,这有助于很多 – Barguast 2011-01-12 12:43:29

3

这是正确的。

当复合列的组合选择性有效地修剪结果集时,组合索引非常有用。

如果向索引(复合或非复合)添加'INCLUDED'列,则可以创建'覆盖'索引以覆盖一个或多个查询,因为这样可以避免执行第二次查找以获取这些列(来自聚簇索引)。

两个单列索引或组合列的组合索引的选择由对该表的总查询工作负载决定。

+0

很高兴知道!感谢您的回复。 – Barguast 2011-01-12 13:01:58