2012-02-18 9 views
3

SQL Serverがvarcharの動的な長さと記憶域を内部的にどのように処理するかを知りたい。SQL ServerはVarcharを内部的にどのように扱いますか?

Varchar私は文字の長さが固定されていることを知っていれば有益ですか?

私はCHARVARCHARの違いを知っているが、データベース設計CHARまたはVARCHARのために大きなデータベースで使用するための最良の方法は何ですか?

答えて

3

CHARは実際のサイズの文字列(2バイト)と実際の文字列を格納するため、varcharのオーバーヘッドは+2バイトで、CHARのオーバーヘッドは - サイズから実際の文字列長を引いた値です。 varcharにNULL値が格納されている場合 - db内のサイズはゼロです。

はNULL 可変長列オフセット配列されている列を読み込むときに、これは最適化を可能にするAnatomy of the Record

record header 
    4 bytes long 
    two bytes of record metadata (record type) 
    two bytes pointing forward in the record to the NULL bitmap 
fixed length portion of the record, containing the columns storing data types that have fixed lengths (e.g. bigint, char(10), datetime) 
NULL bitmap 
    two bytes for count of columns in the record 
    variable number of bytes to store one bit per column in the record, regardless of whether the column is nullable or not (this is 

異なるだけ NULL可能列ごとに1ビットを持っていたSQL Server 2000のよりも簡単) を参照してください。 可変長の列の数が2バイトの場合 可変長の列につき2バイト、列の値の末尾にオフセットを与えた場合 バージョンタグ これはSQL Server 2005のみで、タイムスタンプとバージョンストアへのポインターを含む14バイト構造です。 tempdb

関連する問題