天天看點

索引深入淺出(2/10):堆表

在上一個文章裡,我們了解了有聚集索引表和沒有聚集索引表之間的差別。有聚集索引的表叫聚集表。沒有聚集索引的表叫堆表(heap table)。

堆表(heap table)

  • 沒有聚集索引的表
  • 堆表在sys.partitions裡有1條index_id = 0 的記錄
  • 資料存儲沒有任何的順序,插入資料也沒順序
  • 由于資料沒有任何順序,查詢資料會非常慢
  • 資料頁之間沒有互相連結
  • 從資料頁讀取資料,需要從IAM(Index Allocation Map)頁裡找頁号
  • 在sys.system_internals_allocation_units系統視圖裡,first_iam_page列,指向IAM頁鍊中的第一個IAM頁,它用來管理堆表的空間配置設定
  • 因為沒有聚集索引,碎片不能通過重建索引(rebuilding the index)處理
  • SQL Server使用IAM頁在堆結構裡導航。配置設定給堆的頁沒有任何的順序,且不互相連結。資料頁之間唯一的邏輯關聯是存在IAM頁裡的資訊。

每個IAM頁存儲單個對象的配置設定(單個頁或區配置設定)資訊。堆表的表掃描是通過掃描IAM頁,找到儲存堆表資料的對應頁或區來完成。

使用下列指令可以獲得IAM頁。

1 DBCC IND('databasename','Tablename',-1)      

上述查詢的輸出結果裡,Page Type列值為10的記錄就是IAM頁。

堆的結構如下圖所示:

索引深入淺出(2/10):堆表

參考文章: 

http://www.sqlservercentral.com/blogs/practicalsqldba/2013/03/06/sql-server-index-part-2-structure-of-heap-tables/

注:此文章為

WoodyTu

學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!

繼續閱讀