使用聚集索引和非聚集索引的區別
使用聚集索引和非聚集索引的區別
- 使用情景
- 注意事項
- 效能對比
使用聚集索引
聚集索引確定表中資料的物理順序。聚集索引類似於電話簿。由於聚集索引規定資料在表中的物理儲存順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
聚集索引對於那些經常要搜尋範圍值的列特別有效。使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行在物理相鄰。避免每次查詢該列時都進行排序,從而節省成本。
注意事項
定義聚集索引鍵時使用的列越少越好。
• 包含大量非重複值的列。
• 使用下列運算子返回一個範圍值的查詢:BETWEEN、>、>=、< 和 <=。
• 被連續訪問的列。
• 返回大型結果集的查詢。
• 經常被使用聯接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外來鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 Server 不必對資料進行排序,因為這些行已經排序。這樣可以提高查詢效能。
• OLTP 型別的應用程式,這些程式要求進行非常快速的單行查詢(一般透過主鍵)。應在主鍵上建立聚集索引。
聚集索引不適用於:
• 頻繁更改的列 。這將導致整行移動(因為 SQL Server 必須按物理順序保留行中的資料值)。這一點要特別注意,因為在大資料量事務處理系統中資料是易失的。
• 寬鍵 。寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查詢鍵。為同一表定義的任何非聚集索引都將增大許多,這是因為非聚集索引項包含聚集鍵,同時也包含為此非聚集索引定義的鍵列。
使用非聚集索引
非聚集索引與課本中的目錄類似。資料儲存在一個地方,索引儲存在另一個地方,索引帶有指標指向資料的儲存位置。索引中的專案按索引鍵值的順序儲存,而表中的資訊按另一種順序儲存(這可以由聚集索引規定)。如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。
多個非聚集索引
有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引,因為這是讀者查詢資訊的兩種最常用的方法。對於非聚集索引也是如此。可以為在表中查詢資料時常用的每個列建立一個非聚集索引。
注意事項
在建立非聚集索引之前,應先了解您的資料是如何被訪問的。可考慮將非聚集索引用於:
• 包含大量非重複值的列,如姓氏和名字的組合(如果聚集索引用於列)。如果只有很少的非重複值,如只有 1 和 0,則大多數查詢將不使用索引,因為此時表掃描通常更有效。
• 不返回大型結果集的查詢。
• 返回精確匹配的查詢的搜尋條件(WHERE 子句)中經常使用的列。
• 經常需要聯接和分組的決策支援系統應用程式。應在聯接和分組操作中使用的列上建立多個非聚集索引,在任何外來鍵列上建立一個聚集索引。
• 在特定的查詢中覆蓋一個表中的所有列。這將完全消除對錶或聚集索引的訪問。
索引都是一種排序,只是聚集索引的排序和物理表中的資料排序相同,一致的;而非聚集索引的排序和物理表資料的排序不同。
當我們在更新統計資訊的時候,對於那些聚集索引列不但要更新索引頁還要同時對資料物理表資料重新排序;而對非聚集索引列則只需要更新索引頁。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1029966/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql關於聚集索引、非聚集索引的總結MySql索引
- SQL Server索引 - 非聚集索引SQLServer索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 從InnoDB 索引執行簡述 聚集索引和非聚集索引、覆蓋索引、回表、索引下推索引
- 一文總結分析聚集索引、非聚集索引、覆蓋索引的工作原理!索引
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- MySQL中的聚簇索引和非聚簇索引MySql索引
- YARN的日誌聚集配置使用Yarn
- phoenix全域性索引和本地索引 概述,使用場景,區別等詳解索引
- sqlserver索引重建和索引重組的區別和操作方法SQLServer索引
- NULL在oracle和mysql索引上的區別NullOracleMySql索引
- mysql索引型別Normal,Unique,Full Text區別以及索引方法Btree,Hash的區別MySql索引型別ORM
- Mysql InnoDB B+樹索引和雜湊索引的區別? MongoDB 為什麼使用B-樹?MySql索引MongoDB
- 佩戴安全帽 人員聚集識別
- hudi clustering 資料聚集(三 zorder使用)
- 使用Elasticsearch的動態索引和索引優化Elasticsearch索引優化
- 一分鐘明白MySQL聚簇索引和非聚簇索引MySql索引
- 淺談聚簇索引與非聚簇索引索引
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- hudi clustering 資料聚集(一)
- hudi clustering 資料聚集(二)
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- indexedDB 索引與primarykey主鍵區別Index索引
- mysql索引的使用和優化MySql索引優化
- 索引的使用索引
- Python Numpy 切片和索引(高階索引、布林索引、花式索引)Python索引
- MySQL 字串索引和字首索引MySql字串索引
- MySQL的索引型別和實現原理MySql索引型別
- 唯一索引和普通索引的選擇索引
- 淺析InnoDB引擎的索引和索引原理索引
- MySQL索引的型別MySql索引型別
- MySQL 唯一索引和普通索引MySql索引
- oracle 索引和不走索引的幾種形式Oracle索引
- 擁擠聚集智慧監測系統
- 【Hadoop篇04】Hadoop配置日誌聚集Hadoop
- 如何運營好文旅夜遊專案產業鏈聚集區產業
- MogDB-opengauss中的聚集與分組操作
- TypeScript 索引型別TypeScript索引型別