在SQL中的页面级存储char和varchar数据类型

时间:2018-12-04 07:44:54

标签: sql-server tsql database-administration

今天,我试图找出页面级别的char和varchar数据类型的大小。我试图找出当我们使用char和varchar时一个页面可以存储多少行。这篇文章将有助于回答char和varchar差异的问题。 为此,我创建了一个示例脚本并将数据加载到表中。后来我发现char(10)和varchar(10)数据类型的每一行都消耗了17个字节和21个字节。

有人可以帮我理解为什么每一行都获得这么多空间吗?

CREATE TABLE Test_char_data_type
(
  name char(10)
)
 go

CREATE TABLE Test_varchar_data_type
(
 name varchar(10)
)
go

----insert data in first table---
insert into Test_char_data_type
select 'test_name1'
go 20000

----insert data in second table---
insert into Test_varchar_data_type
select 'test_name1'
go 20000
---------------------------------
sp_spaceused Test_char_data_type
go
sp_spaceused Test_varchar_data_type
go

[space used by tables][1]
[1]: https://i.stack.imgur.com/fLqYj.jpg

 -----Try to get page information by using DMV.
Select * 
from sys.dm_db_database_page_allocations(DB_ID(), 
object_id('Test_varchar_data_type'),NULL,NULL,'DETAILED')
go 
---page level information
DBCC TRACEON(3604)
GO
DBCC PAGE(6,1,524,1)   ---(db_id(),file_id,page_id,viewLevel)
go 

我很惊讶地看到每一行都消耗了17个字节,因此一页只能容纳404行,而对于varchar(10)只有244行。

----- char(10)数据在页面级别     -插槽404,偏移量0x1b34,长度17,DumpStyle BYTE

 -----varchar(10) data at page level  
 --Slot 334, Offset 0x1bc6, Length 21, DumpStyle BYTE

0 个答案:

没有答案