SQL Server中包含多種不同類型的頁,來滿足數據存儲的需求。不管是什麼類型的頁,它們的存儲結構都是相同的。每個數據文件都包含相當數量的由8KB組成的頁,即每頁有8192bytes可用,每頁都有96byte用於頁頭的存儲,剩下的空間
才用來存儲實際的數據,在頁的最後是數據行偏移數組,也可以叫“頁槽”數組,我們可以把一個頁看做是有一個個方格的書櫥,哪行數據占用了哪個槽,都在頁尾的位置進行標示,並且頁尾數組的寫入順序是倒敘的,這樣就可以有效的利用頁空間。
由此可以預見,頁面上的“槽”並不一定是有序存放的,當有新的ID進來,並且該ID位於該頁的最大ID和最小ID之間時(假設是以ID進行排序的葉子頁),那麼該ID數據行則直接插入到已經存在的數據行的後面即可,當有查詢需要檢索該ID所在的行時,
數據庫引擎從索引頁找到該“葉子”頁,將該頁全部加載到內存中,通過頁尾的行偏移數組找到對應的行。頁尾數組的記錄大小存儲在頁頭裡,數組裡面每一個關於“頁槽”的記錄占用空間為2bytes。
據我所知,SQL Server數據文件共有14種頁類型:
堆中的數據頁
聚集索引中的“葉子”頁
在數據文件中的位置是隨機的
DBCC PAGE 中m_type=1
類型2——索引頁(Index Page):
非聚集索引
非“葉子”級聚集索引
在數據文件中的位置是隨機的
DBCC PAGE 中m_type=2
類型3——文本混合頁(Text Mixed Page):
較短長度的LOB數據類型,多種類型,多行存儲
在數據文件中的位置是隨機的
DBCC PAGE 中m_type=3
類型4——文本頁(Text Tree Page):
存儲單個LOB行
在數據文件中的位置是隨機的
DBCC PAGE 中m_type=4
類型5——排序頁(Sort Page):
進行排序操作時的臨時頁
常見於TempDB中,在用戶數據中進行“ONLINE"操作時也可見(例如:聯機創建索引未指定SORT_IN_TEMPDB選項時)
在數據文件中的位置是隨機的
DBCC PAGE 中m_type=19