天天看點

存儲機制

  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和所有使用者自定義資料類型不能被标記為稀疏列。