复合和覆盖指数

时间:2010-04-07 19:57:24

标签: sql-server

Sql Server中的复合索引和覆盖索引有什么区别?

3 个答案:

答案 0 :(得分:2)

覆盖索引是一个复合索引,它包含您当前使用select语句检索的每个列,并且参与where子句。这是大幅提高查询性能的最佳方法之一。

答案 1 :(得分:0)

覆盖索引是一个复合索引,它覆盖(因此名称)完成查询或连接条件所需的所有列。

这里的SQL服务器没有什么特别之处,这些是通用名称。

答案 2 :(得分:0)

当索引包含您的搜索条件以及您的查询尝试检索的所有数据时,复合索引也是覆盖索引。在这个例子中:

SELECT a,b,c FROM Foo WHERE a = 'FooFoo'

覆盖索引将包含列a(您的搜索谓词)以及列b和c。

在这种情况下,SQL Server已经过优化,可以返回索引中找到的值,而无需在实际表中进行额外查找。如果频繁返回b和c但很少搜索,那么可能会设置索引,使得b和c包含在索引中但不会编入索引。

在SQL Server 2005之前,DBA会在其索引中添加额外的“覆盖”列以实现此优化。在SQL Server 2005中,添加了一个附加功能,允许您在索引的叶节点中包含不属于索引树的列。创建索引时,您可以在include子句中指定其他“覆盖”列。这些列不会被索引,而是添加到索引的叶节点,从而保存SQL Server,使其不会在主表中查找其他数据。将数据添加到include子句可以节省SQL Server将额外数据添加到搜索树的开销,同时获得覆盖索引带来的优化。