1

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

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

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

谢谢!

4

2 回答 2

3

那是对的。

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

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

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

于 2011-01-12T12:23:54.073 回答
3

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

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

同样在索引中首先拥有变化最多的字段也可以更快地限制索引搜索量,使其更快。

您还可以包含未编入索引但通常基于索引获取的列、数据。

于 2011-01-12T12:24:47.303 回答