复合数据库索引

时间:2011-01-12 12:18:19

标签: sql database indexing composite-key

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

我想我明白索引列的顺序是至关重要的,因为如果我的索引为{ [Name], [Date] },则基于[Date]的WHERE子句的SELECT将无法执行使用索引,但索引为{ [Date], [Name] }。如果SELECT基于两列,则任何一个索引都可以使用。

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

谢谢!

2 个答案:

答案 0 :(得分:3)

这是正确的。

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

如果将“INCLUDED”列添加到索引(复合或非复合),则可以创建“覆盖”索引以覆盖查询(或多个查询),这是可取的,因为它不需要执行第二个查找以获取这些列(来自聚集索引)。

两个单列索引的选择或组合列的复合索引取决于该表的总查询工作负载。

答案 1 :(得分:3)

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

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

在索引中首先拥有最多变的字段也会更快地限制索引搜索速度,使其更快。

您还可以包含列,未编入索引但根据索引获取的数据。