SQL Server 2008 R2如何处理小页面大小的大数据?

时间:2012-03-30 06:56:41

标签: sql-server sql-server-2008-r2

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字节的页面大小。

现在我的问题是:

  1. 如何为此插入的行创建SQL Server页面?
  2. SQL Server如何在内部处理大数据?
  3. 如果我在EMPID上创建聚集索引,那么它将如何在B-Tree中处理。即在导航级别(叶级除外)?
  4. 提前致谢。

1 个答案:

答案 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字节指针   在原始页面上。