聚集索引 非聚集索引

2021-06-25 17:52:21 字數 986 閱讀 6071

通常情況下,建立索引是加快查詢速度的有效手段。但索引不是萬能的,靠索引並不能實現對所有資料的快速訪問。事實上,如果索引策略和資料檢索需求嚴重不符的話,建立索引反而會降低查詢效能。因此在實際使用當中,應該充分考慮到索引的開銷,包括磁碟空間的開銷及處理開銷(如資源競爭和加鎖)。例如,如果資料頻繁的更新或刪加,就不宜建立索引。

本文簡要討論一下聚簇索引的特點及其與非聚簇索引的區別。

建立索引:

在sql語言中,建立聚簇索引使用create index語句,格式為:create cluster index index_name on table_name(column_name1,column_name2,...);

儲存特點:

聚集索引。表資料按照索引的順序來儲存的,也就是說索引項的順序與表中記錄的物理順序一致。對於聚集索引,葉子結點即儲存了真實的資料行,不再有另外單獨的資料頁。在一張表上最多只能建立乙個聚集索引,因為真實資料的物理順序只能有一種。

非聚集索引。表資料儲存順序與索引順序無關。對於非聚集索引,葉結點包含索引字段值及指向資料頁資料行的邏輯指標,其行數量與資料表行資料量一致。

更新表資料

1、向表中插入新資料行

如果一張表沒有聚集索引,那麼它被稱為「堆集」(heap)。這樣的表中的資料行沒有特定的順序,所有的新行將被新增到表的末尾位置。而建立了聚簇索引的資料表則不同:最簡單的情況下,插入操作根據索引找到對應的資料頁,然後通過挪動已有的記錄為新資料騰出空間,最後插入資料。如果資料頁已滿,則需要拆分資料頁,調整索引指標(且如果表還有非聚集索引,還需要更新這些索引指向新的資料頁)。而類似於自增列為聚集索引的,資料庫系統可能並不拆分資料頁,而只是簡單的新添資料頁。

2、從表中刪除資料行

對刪除資料行來說:刪除行將導致其下方的資料行向上移動以填充刪除記錄造成的空白。如果刪除的行是該資料頁中的最後一行,那麼該資料頁將被**,相應的索引頁中的記錄將被刪除。對於資料的刪除操作,可能導致索引頁中僅有一條記錄,這時,該記錄可能會被移至鄰近的索引頁中,原索引頁將被**,即所謂的「索引合併」。

聚集索引和非聚集索引

聚集索引和非聚集索引 一 聚集索引和非聚集索引 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度...

聚集索引和非聚集索引

本文引自 一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些...

聚集索引與非聚集索引

非聚集索引也是堆結構?其實sqlserver有幾種頁面型別 資料都使用一頁一頁來儲存,就像windows的記憶體也是使用頁面來組織的 感興趣的朋友可以了解下,希望本文可以增加你們對非聚集索引結構的理解。我們知道sqlserver的資料行的儲存有兩種資料結構 a 堆b b樹 binary 二叉樹 資料...