2010-04-07 102 views

回答

2

覆蓋索引是一個複合索引,它包含您正在用select語句檢索並且參與where子句的每一列。這是提高查詢性能的最佳方法之一。

0

覆蓋索引是覆蓋(因此名稱)所有履行查詢或連接條件所必需的列的複合索引。

這裏沒有什麼特別的關於SQL服務器,這些都是通用名稱。

+0

索引不被ANSI標準覆蓋 - 供應商沒有以不同方式命名功能是很幸運的。 – 2010-04-07 20:31:05

+0

@OMG小馬:我懷疑這些名字是由計算機科學家創造的,而不是由數據庫供應商提供的。 – Tomalak 2010-04-07 20:36:56

0

當索引包含您的搜索條件以及您的查詢嘗試檢索的所有數據時,複合索引也是覆蓋索引。在這個例子中:

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

覆蓋索引將包含列(搜索謂語)以及列b和c。

在這種情況下,SQL Server經過優化以返回在索引中找到的那些值,並且不需要在實際表中進行額外查找。如果b和c頻繁返回但很少搜索到,則索引可能會設置爲使b和c包含在索引中但未編入索引。

在SQL Server 2005 DBA之前,會在其索引中添加額外的'覆蓋'列以實現此優化。在SQL Server 2005中添加了一個附加功能,允許您在索引的樹葉節點中包含不屬於索引樹的列。創建索引時,您可以在include子句中指定其他「覆蓋」列。這些列不會編入索引,而是添加到保存SQL Server的索引的葉節點,以查找主表中的其他數據。將數據添加到include子句可以節省SQL Server在獲取覆蓋索引帶來的優化的同時將額外數據添加到搜索樹的開銷。