2012-02-18 92 views
3

我想知道SQL Server如何在內部處理varchar動態長度和存儲。SQL Server如何在內部處理Varchar?

如果我知道我有固定長度的字符來到列中,是否有益於使用Varchar

我知道CHARVARCHAR之間的差異,但什麼是在大的數據庫,數據庫設計CHARVARCHAR使用最好的方法?

回答

3

CHAR在行中分配其大小,VARCHAR存儲實際大小的字符串(2字節),然後存儲實際字符串,因此varchar的開銷爲+2字節,CHAR的開銷爲 - 大小減去實際字符串長度。如果在varchar中存儲NULL值 - 它在db中的大小是零。

參見於SQL Server 2000,其具有每 空的列僅一個比特) 讀取都爲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 

不同和更簡單的 兩個字節用於可變長度列的計數 每個可變長度列兩個字節,給出列值的末尾偏移量 版本控制標記 this僅在SQL Server 2005中,並且是一個14字節的結構,其中包含一個時間戳和一個指向版本存儲區的指針 tempdb