SQL Server存儲機制

  1、區段

  區段(extent)是用來爲表和索引分配空間的基本存儲單元。它由8個連續的64KB數據頁組成。

  基於區段(而不是實際使用空間)分配空間的概念的要點:

  1.   一旦區段已滿,那麼下一記錄將要佔據的空間不是記錄的大小,而是整個新區段的大小。一次分配一個區段而不是分配一個記錄。
  2.   通過預分配空間,SQL Server節省爲每個記錄分配新空間的時間。

    向當前分配的區段添加了過多的行就要佔用整個區段,看起來是一種浪費,但是這種方法浪費的空間不多。但是,這些浪費的空間會累加,特別是在碎片較多的環境中。

  佔據所有空間的好處是SQL Server省去了一些分配時間的系統開銷,不需在每次寫入行時都考慮分配問題,SQL Server僅僅當需要新區段時才處理額外的空間分配。

  不要將區段佔用的空間和數據庫佔用的空間相混淆,分配給數據庫的那些空間就是磁盤驅動器將要減少的可用空間。區段僅僅是在又數據庫保留的整個空間內再次進行分配的方式。

  2、頁

  頁是特定區段中的分配單元。每個區段包含8頁。

  也是在到達實際數據行前所能達到的最後一個存儲級別。儘管每個區段中的頁數是固定的,但是每一頁中的行數不是固定的。這取決於行的大小,而行的大小是可以變化的。可以把頁看做是錶行和索引行數據的容器。通常不允許跨行。

  常用的頁類型:

  1、數據頁:數據也是不需解釋的-它們是表中的實際數據,但任何沒有用text in row選項、varchar(max)或varbinary(max)定義的BLOB數據除外。

  2、索引頁:索引頁也是相當直觀-它們既包括非羣集索引的非頁級和頁級頁,又包括羣集索引的非頁級頁。

  在SQL SERVER中,存儲的最小單位是頁。SQL SERVER對於頁的讀取,要麼整個讀取,要麼完全不讀取,沒有折中。

  數據庫頁的大小是8K,實際能夠存儲的數據量爲1024*8=8192-頁頭(96)-行偏移(36)=8060字節。

  頁拆分

  當頁滿時,它會進行拆分。這意味着多個新頁被分配-也意味着現有頁上又近半的數據被移到新頁上。

  在使用羣集索引時,會有例外。如果有一個羣集索引,並且下一個插入的記錄在物理上將作爲表中的最後一個記錄,那麼創建一個新頁,然後將該新行添加到這個新頁中,而不需要重新定位任何現有數據。

  3、行

  行就是表中的一行記錄。行最大可達8KB。除了8060字符限制外,還有最大1024標準列(非稀疏列)的限制,列就是表的一列數據,就是你理解的列。實際上,突破8060字符限制前用完列的情況不多見。1024提供了小於8字節的平均列寬度。1024個列,一個表通常才十幾個列啊。當突破了1024個列時,就要運用到稀疏列。

  4、稀疏列

  稀疏列是SQL Server2008新引入的一種特殊的數據結構。它們主要用於處理重複的場景,其中的列只是偶爾會用到。大部分時候爲空。許多時候,一旦遇到少量這類列,就意味着以後可能會遇到大量這類列。使用稀疏列,可以將單個表中允許的列的總數提高到30000。30000個列,什麼概念?什麼系統用得到這麼多列。

  Image、text、ntext、geography、geometry、timestamp和所有用戶自定義數據類型不能被標記爲稀疏列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章