資料庫的頁和區

2021-09-03 07:22:18 字數 1801 閱讀 3118

現在給大家介紹sql server 2008 r2如何儲存資料

sql server 中資料儲存的基本單位是頁。為資料庫中的資料檔案(.mdf 或 .ndf)分配的磁碟空間可以從邏輯上劃分成頁(從 0 到 n連續編號)。磁碟 i/o 操作在頁級執行。也就是說,sql server 讀取或寫入所有資料頁。

區是八個物理上連續的頁的集合,用來有效地管理頁。所有頁都儲存在區中。

在 sql server 中,頁的大小為 8 kb。這意味著 sql server 資料庫中每 mb 有 128 頁。每頁的開頭是 96 位元組的標頭,用於儲存有關頁的系統資訊。此資訊包括頁碼、頁型別、頁的可用空間以及擁有該頁的物件的分配單元 id。

下表說明了 sql server 資料庫的資料檔案中所使用的頁型別。

頁型別內容

data

text in row設定為 on 時,包含除 text、ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 資料之外的所有資料的資料行。

index

索引條目。

text/image

大型物件資料型別:

資料行超過 8 kb 時為可變長度資料型別列:

global allocation map、shared global allocation map

有關區是否分配的資訊。

page free space

有關頁分配和頁的可用空間的資訊。

index allocation map

有關每個分配單元中表或索引所使用的區的資訊。

bulk changed map

有關每個分配單元中自最後一條 backup log 語句之後的大容量操作所修改的區的資訊。

differential changed map

有關每個分配單元中自最後一條 backup database 語句之後更改的區的資訊。

注意

日誌檔案不包含頁,而是包含一系列日誌記錄。

在資料頁上,資料行緊接著標頭按順序放置。頁的末尾是行偏移表,對於頁中的每一行,每個行偏移表都包含乙個條目。每個條目記錄對應行的第乙個位元組與頁首的距離。行偏移表中的條目的順序與頁中行的順序相反。

大型行支援

行不能跨頁,但是行的部分可以移出行所在的頁,因此行實際可能非常大。頁的單個行中的最大資料量和開銷是 8,060 位元組 (8 kb)。但是,這不包括用 text/image 頁型別儲存的資料。包含 varchar、nvarchar、varbinary 或 sql_variant 列的表不受此限制的約束。當表中的所有固定列和可變列的行的總大小超過限制的 8,060 位元組時,sql server 將從最大長度的列開始動態將乙個或多個可變長度列移動到 row_overflow_data 分配單元中的頁。每當插入或更新操作將行的總大小增大到超過限制的 8,060 位元組時,將會執行此操作。將列移動到 row_overflow_data 分配單元中的頁後,將在 in_row_data 分配單元中的原始頁上維護 24 位元組的指標。如果後續操作減小了行的大小,sql server 會動態將列移回到原始資料頁。區

區是管理空間的基本單位。乙個區是八個物理上連續的頁(即 64 kb)。這意味著 sql server 資料庫中每 mb 有 16 個區。

為了使空間分配更有效,sql server 不會將所有區分配給包含少量資料的表。sql server 有兩種型別的區:

通常從混合區向新錶或索引分配頁。當表或索引增長到 8 頁時,將變成使用統一區進行後續分配。如果對現有表建立索引,並且該錶包含的行足以在索引中生成 8 頁,則對該索引的所有分配都使用統一區進行。

oracle資料庫和mysql資料庫的區別

1 mysql裡用雙引號包起字串,oracle裡只可以用單引號包起字串。2 oracle是大型資料庫,而mysql是中小型資料庫。3 mysql的主鍵一般使用自動增長型別,在建立表時只要指定表的主鍵為auto increment,在插入記錄時,不需要再指定該記錄的主鍵值,主鍵將自動增長 oracle...

SQL Server 和 MySQL 資料庫的區別

一 資料庫對比 1.microsoft sql server2014 中等貴,功能最少,安裝中等方便,microsoft sql server2014 環境裡的其他相關元件最少,支援平台最少,使用最方便,開發最方便,運維最方便,不開源,速度中等,一般安全。2.mysql 免費,功能中等,安裝最方便,...

資料庫中 union和unionall的區別

union因為要進行重複值掃瞄,所以效率低。如果合併沒有刻意要刪除重複行,那麼就使用union all 兩個要聯合的sql語句 字段個數必須一樣,而且字段型別要 相容 一致 如果我們需要將兩個select語句的結果作為乙個整體顯示出來,我們就需要用到union或者union all關鍵字。union...