SQL Server如何在變長列上儲存索引

2021-09-26 05:12:15 字數 3042 閱讀 9122

這篇文章我想談下sql server如何在變長列上儲存索引。首先我們建立乙個包含變長列的表,在上面定義主鍵,即在上面定義了聚集索引,然後往裡面插入80000條記錄:

1

--create a new table

2create

table

customers3(

4 customername varchar(255) not

null

primary

key,

5 filler char(138) not

null6)

7go89

--insert 80.000 records

10declare

@iint=1

11while (@i

<=

80000)12

begin

13insert

into customers values14(

15'customername'+

cast(@i

asvarchar

),16

'filler'+

cast(@i

asvarchar)17

)1819set

@i+=120

end21

go

從**裡我們可以看到,我在varchar(255)列上建立了主鍵約束,sql server會強制這列為唯一聚集索引。接下來我們通過dmv sys.dm_db_index_physical_stats來獲取聚集索引的相關物理資訊:

從輸出結果可以看出,在索引頁裡,min_record_size_in_bytes列的值是7,max_record_size_in_bytes列的值是28。我們據此可以得出結論:在索引記錄內部,聚集鍵是以變長列儲存的。我們建立乙個幫助表來儲存dbcc ind的輸出資訊來做進一步分析。

我這裡的根頁是15058,我們使用dbcc page命令檢視下這個根頁(記得先執行 dbcc traceon(3604))。

即如下所示的數字:

00000000:   269d3b00 00010001 001b0043 7573746f †&

.;........custo

00000010: 6d65724e 616d6531 333533†††††††††††††mername1353

我們來分析下這些16進製制值:

26 95020000 0100 0100 1b00 43757374 6f6d6572 4e616d65 31333533

從上面的解釋,我們可以看出sql server儲存變長索引列格式和資料頁裡儲存變長列格式是一樣的。但你要知道有一點額外開銷,因為你需要額外2 bytes 來儲存變長列個數,對於每個變長列在變長列偏移陣列裡需要2 bytes。在設計索引和計算乙個索引頁存放多少索引記錄時,要留意這些儲存開銷。

SQL Server設定主鍵自增長列

1.新建一資料表,裡面有欄位id,將id設為為主鍵 create table tb id int constraint pkid primary key id create table tb id int primary key 2.新建一資料表,裡面有欄位id,將id設為主鍵且自動編號 creat...

重置sqlserver自增長列的種子

如果表中的資料不要了,用下面的語句 truncate table表 如果表中的語句還要,用下面的語句 dbcc checkident 表名,reseed,1 dbcc checkident table name noreseed 不重置當前標識值。dbcc checkident 返回乙個報表,它指明...

如何在jsp中連線SQLserver資料庫

1 載入jdbc驅動程式 2 建立連線物件connection的例項物件,這裡的url就是sqlserver在電腦中位址,一般都是jdbc sqlserver localhost 1433 埠要和自己電腦上的一致 至於username和password就是資料庫的登入名和密碼了 3 執行sql語句,...