[轉]聚集索引和非聚集索引的區別
聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致。
聚集索引表記錄的排列順序與索引的排列順序一致
- 優點是查詢速度快,因為一旦具有第一個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。
- 缺點是對錶進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到資料頁的相應位置,必須在資料頁中進行資料重排, 降低了執行速度。建議使用聚集索引的場合為:
a. 此列包含有限數目的不同值;
b. 查詢的結果返回一個區間的值;
c. 查詢的結果返回某值相同的大量結果集。
非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了B+樹的結構,但非聚集索引的葉子層並不與實際的資料頁相重疊,而採用葉子層包含一個指向表中的記錄在資料頁中的指標的方式。
非聚集索引比聚集索引層次多,新增記錄不會引起資料順序的重組。
建議使用非聚集索引的場合為:
a. 此列包含了大量數目不同的值;
b. 查詢的結束返回的是少量的結果集;
c. order by 子句中使用了該列。
--不用索引查詢
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--建立聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查詢
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
表中經常有一個列或列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵.(預設為聚集索引)
聚集索引確定表中資料的物理順序。聚集索引類似於電話簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
非聚集索引與課本中的索引類似。資料儲存在一個地方,索引儲存在另一個地方,索引帶有指標指向資料的儲存位置。索引中的專案按索引鍵值的順序儲存,而表中的資訊按另一種順序儲存(這可以由聚集索引規定)。
如果在表中未建立聚集索引,則無法保證這些行具有任何特定的順序。
聚集索引..就像我們新華字典中的按拼音排序..即你查.."愛"字..可以在前面看到"癌"字...但不你不在前後頁中看到"受"字..
而非聚集索引..就是新華字典中的按部首..筆劃排序...
聚集索引相當於我們書本上前面的目錄的一樣,它可以方便快速的找到你想找的內容,而非聚集索引就相當於書最後幾頁的解釋,它是對書中某個語句或者是生詞的解釋,就像我們上學時候的地理說一樣,書後面都有各種地理名稱的英文解釋;
《資料庫原理》裡面的解釋:聚集索引的順序就是資料的物理儲存順序,而非聚集索引的順序和資料物理排列無關。因為資料在物理存放時只能有一種排列方式,所以一個表只能有一個聚集索引。在SQL SERVER中,索引是通過二叉樹的資料結構來描述的;我們可以如此理解這個兩種索引:聚集索引的葉節點就是資料節點,而非聚集索引的葉節點仍然是索引節點,只不過其包含一個指向對應資料塊的指標。
聚集索引會降低 insert,和update操作的效能,所以,是否使用聚集索引要全面衡量。
相關文章
- 使用聚集索引和非聚集索引的區別索引
- 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儲存的區別索引
- 【SQL Server2005頁面儲存4之--非聚集索引行在葉級別儲存】SQLServer索引
- InnoDB事務鎖之行鎖-聚集索引加鎖流程索引
- 從效能的角度談SQL Server聚集索引鍵的選擇SQLServer索引
- SQL Server調優實戰 亂建聚集索引的後果SQLServer索引
- MySQL的btree索引和hash索引的區別MySql索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- MySQL單列索引和組合索引的區別MySql索引
- MySQL Hash索引和B-Tree索引的區別MySql索引
- InnoDB事務鎖之行鎖-insert加鎖原理圖-聚集索引索引
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人SQLServer索引
- 關於唯一性索引造成堵塞和非唯一性索引造成堵塞的區別索引
- MySQL單列索引和組合索引的區別介紹MySql索引
- 索引全掃描和索引快速全掃描的區別索引
- MySQL中的聚簇索引和非聚簇索引MySql索引