關於通過聚集索引以及堆來對比資料表組織結構-SQLServer最優實踐 的一點看法
本文主要測試聚集索引表和堆表的插入、刪除、更新、查詢以及併發情況下的查詢效率
在單使用者插入、刪除、更新、查詢的情況下,聚集索引表的效率要優於堆表
這是因為在插入、刪除、更新操作時,聚集索引表的讀寫操作只有一次,而堆表的讀寫操作則分別為兩次,即需要維護索引資料和表資料。
再插入時Page splits/sec的指標,聚集索引表遠遠高於堆表,這是在插入資料時,由於資料是按照聚集索引列進行組織的,所以聚集索引表的葉子/非葉子節點的分裂遠遠高於堆表。
聚集索引表情況下Page splits/sec=Pages Allocated/sec,即分裂的速度也即重新分配的速度
而堆表情況下Pages Allocated/sec要大於聚集索引表,這是因為堆表頁面的無序性造成的,必須每次從IAM頁中進行分配,而聚集索引表則可以通過雙向連結串列來查詢。
Pages Allocated/sec為SQL Server 例項的所有資料庫中每秒分配的頁數。這些頁包括從混合區和統一區中分配的頁。
對於查詢而言,聚集索引當然是最快的選擇了,堆表則需要進行兩次查詢。更新和刪除操作的情況與其類似。
在併發情況下,資料的插入效率,堆表則好於聚集索引表,主要體現在Page splits/sec和page latch waits per
second這兩個指標上,page latch waits per
second可以理解為對頁面的爭用等待數,因為聚集索引的資料組織的排序性,比如要對熱點頁面發生相應的爭用,而堆表則不存在該問題。
綜上,一般情況下,聚集索引表的效能要優於堆表。
但該測試也存在一定的問題,測試資料的有序性無法論證,索引列資料的有序性對插入以及空間利用率都有很大的關係,同時也會影響後續的更新、刪除操作的測試。
其次是表的列寬太小,並且初始索引填充因子皆為0,對於更新、刪除操作的測試也沒有太大意義,因為更新的列寬沒有發生變化,對頁面的分裂和空間利用率不產生任何影響
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-678089/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle堆組織表的索引和索引組織表Oracle索引
- SQLSERVER的非聚集索引結構SQLServer索引
- mysql關於聚集索引、非聚集索引的總結MySql索引
- Sqlserver關於tempdb臨時資料庫最優檔案個數的最優實踐SQLServer資料庫
- SQLServer索引優化(3):對於建組合索引的要求SQLServer索引優化
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- 對於iOS效能優化的一點看法iOS優化
- 資料庫表,索引(索引組織表,聚簇表,聚簇索引,)資料庫索引
- 關於Mysql索引的資料結構MySql索引資料結構
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- 資料結構之索引堆(IndexHeap)資料結構索引Index
- oracle iot索引組織表(一)Oracle索引
- 索引組織表上建立BITMAP索引(一)索引
- 關於主外來鍵表資料提交過程中的一點疑惑
- Oracle 堆組織表(HOT)Oracle
- SQL Server 索引和表體系結構(非聚集索引)SQLServer索引
- MySQL 對比資料庫表結構MySql資料庫
- oracle 索引組織表Oracle索引
- 關於SqlServer資料表操作SQLServer
- SQLServer索引優化(2):對於索引中include的理解SQLServer索引優化
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- 組織架構新型資料結構思考架構資料結構
- 【資料結構】堆的建立以及其他操作!!!資料結構
- Oracle 索引組織表(IOT)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結Oracle索引
- (2) SqlServer表與索引的結構的補充SQLServer索引
- 關於oracle的表空間,分割槽表,以及索引的總結(轉)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結 -- 轉Oracle索引
- 索引組織表上建立BITMAP索引(三)索引
- 索引組織表上建立BITMAP索引(二)索引
- 關於樹的資料結構(二分搜尋樹,堆和優先佇列)資料結構佇列
- 索引組織表(Index Organizied Table)索引Index
- ORACLE索引組織表討論Oracle索引
- oracle iot索引組織表(二)Oracle索引
- PHP 實現堆, 堆排序以及索引堆PHP排序索引
- 通過遞迴實現,單表父子關係資料 或者上下級關係資料的組合遞迴
- 關於工廠模式的一點個人看法模式
- 關於itpub菠菜門事件的一點看法事件