這里收集整理了一系列數據庫的索引知識,算是對索引知識的一個總結回顧吧。通過總結,你將發現自己以前很多很模糊的概念都清晰了很多。
不論是緩存的數據信息,還是物理保存的信息,他們的基本單位都是數據頁。所以理解數據頁是最最基礎的知識點,本文就介紹跟索引有關的數據頁的一些基礎知識。
數據頁的基礎知識
SQL Server 中數據存儲的基本單位是頁(Page)。數據庫中的數據文件(.mdf 或 .ndf)分配的磁盤空間可以從邏輯上劃分成頁(從 0 到 n 連續編號)。磁盤 I/O 操作在頁級執行。也就是說,SQL Server 每次讀取或寫入數據的最少數據單位是數據頁。
注意:日志文件不是用這種方式存儲的,而是一系列日志記錄。
數據庫被分成邏輯頁面(每個頁面8KB),并且在每個文件中,所有頁面都被連續地從0到x編號,其中x是由文件的大小決定的。我們可以通過指定一個數據庫ID、一個文件ID、一個頁碼來引用任何一個數據頁。當我們使用ALTER DATABASE命令來擴大一個文件時,新的空間會被加到文件的末尾。也就是說,我們所擴大文件的新空間第一個數據頁的頁碼是x+1。當我們使用DBCC SHRINKDATABASE或DBCC SHRINKFILE命令來收縮一個數據庫時,將會從數據庫中頁碼最高的頁面(文件末尾)開始移除頁面,并向頁碼較低的頁面移動。這保證了一個文件中的頁碼總是連續的。
在 SQL Server 中,頁的大小為 8 KB。這意味著 SQL Server 數據庫中每 MB 有 128 頁。依次類推。根據數據庫的文件大小,我們可以算出數據庫有多少數據頁。
SQL Server 2005 有以下幾種頁類型:
| 頁類型 | 內容 |
| Data | 當 text in row 設置為 ON 時,包含除 text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 數據之外的所有數據的數據行。 |
| Index | 索引條目。 |
| Text/Image | 大型對象數據類型: text、 ntext、image、nvarchar(max)、varchar(max)、varbinary(max) 和 xml 數據。 數據行超過 8 KB 時為可變長度數據類型列: varchar、nvarchar、varbinary 和 sql_variant |
| Global Allocation Map、Shared Global Allocation Map | 有關區是否分配的信息。 |
| Page Free Space | 有關頁分配和頁的可用空間的信息。 |
| Index Allocation Map | 有關每個分配單元中表或索引所使用的區的信息。 |
| Bulk Changed Map | 有關每個分配單元中自最后一條 BACKUP LOG 語句之后的大容量操作所修改的區的信息。 |
| Differential Changed Map | 有關每個分配單元中自最后一條 BACKUP DATABASE 語句之后更改的區的信息。 |
數據頁(Data 類型頁)的結構示意圖:

每頁的開頭是 96 字節的標頭,用于存儲有關頁的系統信息。此信息包括頁碼、頁類型、頁的可用空間以及擁有該頁的對象的分配單元 ID。
在數據頁上,數據行緊接著標頭按順序放置。頁的末尾是行偏移表,對于頁中的每一行,每個行偏移表都包含一個條目。每個條目記錄對應行的第一個字節與頁首的距離。行偏移表中的條目的順序與頁中行的順序相反。
新聞熱點
疑難解答