使用聚集索引和非聚集索引的區別
使用聚集索引和非聚集索引的區別
- 使用情景
- 注意事項
- 效能對比
使用聚集索引
聚集索引確定表中資料的物理順序。聚集索引類似於電話簿。由於聚集索引規定資料在表中的物理儲存順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。避免每次查詢該列時都進行排序,從而節省成本。
注意事項
定義聚集索引鍵時使用的列越少越好。
• 包含大量非重複值的列。
• 使用下列運算子返回一個範圍值的查詢:BETWEEN、>、>=、< 和 <=。
• 被連續訪問的列。
• 返回大型結果集的查詢。
• 經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外來鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 Server 不必對資料進行排序,因為這些行已經排序。這樣可以提高查詢效能。
• OLTP 型別的應用程式,這些程式要求進行非常快速的單行查詢(一般透過主鍵)。應在主鍵上建立聚集索引。
聚集索引不適用於:
• 頻繁更改的列 。這將導致整行移動(因為 SQL Server 必須按物理順序保留行中的資料值)。這一點要特別注意,因為在大資料量事務處理系統中資料是易失的。
• 寬鍵 。寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查詢鍵。為同一表定義的任何非聚集索引都將增大許多,這是因為非聚集索引項包含聚集鍵,同時也包含為此非聚集索引定義的鍵列。
使用非聚集索引
非聚集索引與課本中的目錄類似。資料儲存在一個地方,索引儲存在另一個地方,索引帶有指標指向資料的儲存位置。索引中的專案按索引鍵值的順序儲存,而表中的資訊按另一種順序儲存(這可以由聚集索引規定)。如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。
多個非聚集索引
有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引,因為這是讀者查詢資訊的兩種最常用的方法。對於非聚集索引也是如此。可以為在表中查詢資料時常用的每個列建立一個非聚集索引。
注意事項
在建立非聚集索引之前,應先了解您的資料是如何被訪問的。可考慮將非聚集索引用於:
• 包含大量非重複值的列,如姓氏和名字的組合(如果聚集索引用於列)。如果只有很少的非重複值,如只有 1 和 0,則大多數查詢將不使用索引,因為此時表掃描通常更有效。
• 不返回大型結果集的查詢。
• 返回精確匹配的查詢的搜尋條件(WHERE 子句)中經常使用的列。
• 經常需要聯接和分組的決策支援系統應用程式。應在聯接和分組操作中使用的列上建立多個非聚集索引,在任何外來鍵列上建立一個聚集索引。
• 在特定的查詢中覆蓋一個表中的所有列。這將完全消除對錶或聚集索引的訪問。
索引都是一種排序,只是聚集索引的排序和物理表中的資料排序相同,一致的;而非聚集索引的排序和物理表資料的排序不同。
當我們在更新統計資訊的時候,對於那些聚集索引列不但要更新索引頁還要同時對資料物理表資料重新排序;而對非聚集索引列則只需要更新索引頁。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1029966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉]聚集索引和非聚集索引的區別索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- mysql關於聚集索引、非聚集索引的總結MySql索引
- SQL Server索引 - 非聚集索引SQLServer索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 資料庫的聚集索引和非聚集索引 很好的詳細說明資料庫索引
- 從InnoDB 索引執行簡述 聚集索引和非聚集索引、覆蓋索引、回表、索引下推索引
- 一文總結分析聚集索引、非聚集索引、覆蓋索引的工作原理!索引
- SQLSERVER的非聚集索引結構SQLServer索引
- SQL Server 索引和表體系結構(非聚集索引)SQLServer索引
- SQL Server 深入解析索引儲存(非聚集索引)SQLServer索引
- FAQ系列|MySQL索引之聚集索引MySql索引
- SQL Server 2008 建立非聚集索引SQLServer索引
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- SQL Server 2008 非聚集索引設計SQLServer索引
- SQL Server 深入解析索引儲存(聚集索引)SQLServer索引
- PostgreSQLGIN單列聚集索引應用SQL索引
- 探究SQL新增非聚集索引,效能提高几十倍之謎SQL索引
- 【SQL Server2005頁面儲存5之--非聚集索引行在非葉級別儲存】SQLServer索引
- 軟體開發人員真的瞭解SQL索引嗎(聚集索引)SQL索引
- Sql Server之旅——第四站 你必須知道的非聚集索引掃描SQLServer索引
- 唯一索引和非唯一索引ROWID儲存的區別索引
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- 【SQL Server2005頁面儲存4之--非聚集索引行在葉級別儲存】SQLServer索引
- InnoDB事務鎖之行鎖-聚集索引加鎖流程索引
- 從效能的角度談SQL Server聚集索引鍵的選擇SQLServer索引
- SQL Server調優實戰 亂建聚集索引的後果SQLServer索引
- MySQL的btree索引和hash索引的區別MySql索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- MySQL單列索引和組合索引的區別MySql索引
- MySQL Hash索引和B-Tree索引的區別MySql索引
- InnoDB事務鎖之行鎖-insert加鎖原理圖-聚集索引索引
- MySQL聚簇索引和非聚簇索引的原理及使用MySql索引
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人SQLServer索引
- 關於唯一性索引造成堵塞和非唯一性索引造成堵塞的區別索引
- MySQL單列索引和組合索引的區別介紹MySql索引
- 索引全掃描和索引快速全掃描的區別索引