聚集索引

聚集索引是指資料庫表行中數據的物理順序與鍵值的邏輯(索引)順序相同。一個表只能有一個聚集索引,因為一個表的物理順序只有一種情況,所以,對應的聚集索引只能有一個。如果某索引不是聚集索引,則表中的行物理順序與索引順序不匹配,與非聚集索引相比,聚集索引有著更快的檢索速度。

基本介紹

聚集索引是一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。

聚集索引也稱為聚簇索引(Clustered Index),聚類索引,簇集索引 。同樣,非聚集索引也稱為非聚簇索引,非聚類索引,非簇集索引。

聚集索引確定表中數據的物理順序。聚集索引類似於電話簿,按姓氏排列數據。由於聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。

聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。例如,如果應用程式執行的一個查詢經常檢索某一日期範圍內的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然後檢索表中所有相鄰的行,直到到達結束日期。這樣有助於提高此類查詢的性能。同樣,如果對從表中檢索的數據進行排序時經常要用到某一列,則可以將該表在該列上聚集(物理排序),避免每次查詢該列時都進行排序,從而節省成本。

當索引值唯一時,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇員 ID 列 emp_id 查找特定雇員的最快速的方法,是在 emp_id 列上創建聚集索引或 PRIMARY KEY 約束。

適用情況

1、含有大量非重複值的列。

2、使用BETWEEN,>,>=,<或<=返回一個範圍值的列

3、被連續訪問的列

4、返回大型結果集的查詢

5、經常被使用連線或GROUP BY子句的查詢訪問的列

下面的表總結了何時使用聚集索引或非聚集索引:

動作描述 使用聚集索引 使用非聚集索引
列經常被分組排序
返回某範圍內的數據 不應
一個或極少不同值 不應 不應
小數目的不同值 不應
大數目的不同值 不應
頻繁更新的列 不應
外鍵列
主鍵列
頻繁修改索引列 不應

使用注意事項

注意事項 定義聚集索引鍵時使用的列越少越好,這一點很重要。如果定義了一個大型的聚集索引鍵,則同一個表上定義的任何非聚集索引都將增大許多,因為非聚集索引條目包含聚集鍵。當把 SQL 腳本保存到可用空間不足的磁碟上時,索引最佳化嚮導不返回錯誤。有關 Microsoft® SQL Server™ 2000 中如何實現非聚集索引的更多信息,請參見非聚集索引。

在分析過程中,索引最佳化嚮導會消耗相當多的 CPU 及記憶體資源。最好在生產伺服器的測試版上執行最佳化,而不要在生產伺服器上執行。此外,最好在另一台計算機上而非運行 SQL Server 的計算機上運行該嚮導。該嚮導不能用於在 SQL Server 6.5 版或更早版本的資料庫中選擇或創建索引及統計信息。

在創建聚集索引之前,應先了解您的數據是如何被訪問的。可考慮將聚集索引用於:

包含大量非重複值的列。使用下列運算符返回一個範圍值的查詢:BETWEEN、>、>=、< 和 <=。被連續訪問的列。返回大型結果集的查詢。經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 SQL Server 不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。OLTP類型的應用程式,這些程式要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創建聚集索引。 聚集索引不適用於:

頻繁更改的列 這將導致整行移動,因為 SQL Server 必須按物理順序保留行中的數據值。這一點要特別注意,因為在大數據量事務處理系統中數據是易失的。寬鍵 來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內。

相關詞條

相關搜尋

熱門詞條

聯絡我們