今天,我试图找出页面级别的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