2012-03-30 8 views
0

SQL Serverの実際のデータはページに格納され、各ページの固定サイズは8192バイトです。そのページのヘッダー(pageId, FileIDなど)によって96バイトにBeanが使用され、8096バイトの名前が使用されます実際のデータ保管。SQL Server 2008 R2は小さなページサイズの大きなデータをどのように処理しますか?

CREATE TABLE [dbo].[Employee] 
(
    [FristName] [nvarchar](4000) NOT NULL, 
    [LastName] [nvarchar](4000) NOT NULL, 
    [EmpID] [int] IDENTITY(1,1) NOT NULL 
) 

、その後、私はそれに行を挿入:私はこのようなテーブルEmployeeを作成したとした場合

は今、私は何を知っていることです。そのレコード

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 

の大きさを計算するには、各行が8096バイトのページ・サイズよりも大きいサイズ16002のバイトを有することを意味します。

は今私の質問は以下のとおりです。

  1. SQL Serverのページは、この挿入された行のために作成されている方法は?
  2. SQL Serverは内部的に大きなデータをどのように処理するのですか?
  3. そして、クラスタ化インデックスをEMPIDに作成すると、Bツリーでどのように処理されるのでしょうか。すなわち、ナビゲーションレベル(リーフレベル以外)?

ありがとうございます。

答えて

2

Table and Index Organization ROW_OVERFLOW_DATA割当部参照:表(ヒープまたはクラスタテーブル)、インデックス、 またはインデックス付きビューで使用されるすべてのパーティションについて

、一のROW_OVERFLOW_DATA割当単位があります。この 割り当て単位は、 の長さの列(varchar、nvarchar、varbinary、またはsql_variant)のデータ行が、 IN_ROW_DATA割り当て単位で8 KBの行サイズ制限を超えるまで、ゼロ(0)ページを含みます。 サイズの制限に達すると、SQL Serverはその行の最大幅が の列をROW_OVERFLOW_DATA 割り当て単位のページに移動します。このオフ・ロー・データへの24バイト・ポインタは、元のページの に保持されます。

+0

ありがとうございました!正確な答えを得ました。明らかに+1と受け入れられた:) – Darshan

関連する問題