SQL Server的实际数据存储在页面中,每个页面的固定大小为8192个字节,其中96个字节由该页面的标题(用于pageId, FileID
等)使用,并重命名为8096字节将用于您的实际数据存储。
现在我要知道的是,假设我已经创建了这样的表Employee
:
CREATE TABLE [dbo].[Employee]
(
[FristName] [nvarchar](4000) NOT NULL,
[LastName] [nvarchar](4000) NOT NULL,
[EmpID] [int] IDENTITY(1,1) NOT NULL
)
然后我在其中插入了一行。然后计算该记录的大小
FirstName nvarchar 4000 * 2 bytes(nvarchar size) = 8000 bytes
LastName nvarchar 4000 * 2 bytes(nvarchar size) = 8000 bytes
EmpID int = 2 bytes
Total = 16002 bytes
这意味着每行的大小为16002字节,大于8096字节的页面大小。
现在我的问题是:
EMPID
上创建聚集索引,那么它将如何在B-Tree中处理。即在导航级别(叶级除外)?提前致谢。
答案 0 :(得分:2)
请参阅Table and Index Organization ROW_OVERFLOW_DATA分配单位:
对于表(堆或聚簇表)使用的每个分区,index, 或索引视图,有一个ROW_OVERFLOW_DATA分配单元。这个 分配单元包含零(0)页,直到具有变量的数据行 长度列(varchar,nvarchar,varbinary或sql_variant)中的 IN_ROW_DATA分配单元超出了8 KB行大小限制。当。。。的时候 达到大小限制,SQL Server移动列 从该行到ROW_OVERFLOW_DATA中的页面的最大宽度 分配单位。保持对该行外数据的24字节指针 在原始页面上。