CREATE TABLE [dbo].[Account]
(
[AccountId] [int] IDENTITY(1,1) NOT NULL,
[RowVersion] [timestamp] NOT NULL,
[Deleted] [bit] NOT NULL CONSTRAINT [DF_Account_Deleted] DEFAULT ((0)),
[CurrentBalance] [decimal](19, 4) NOT NULL DEFAULT ((0)),
[ExtrasCurrentBalance] [decimal](19, 4) NOT NULL DEFAULT ((0)),
CONSTRAINT [PK_Account]
PRIMARY KEY CLUSTERED ([AccountId] ASC)
) ON [PRIMARY]
按照逻辑中的说法 https://docs.microsoft.com/en-us/sql/relational-databases/databases/estimate-the-size-of-a-heap
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
所以我的行大小应该是
(6+8+1+9+8)+3+4 = 39
但执行此查询时
DBCC SHOWCONTIG ('dbo.Account') with tableresults
我看到MinimumRecordSize
和MaximumRecordSize
为52。
那我们怎么得到一个52字节的值?
谢谢, 帕
答案 0 :(得分:1)
我相信你的数据库中有行版本控制,然后才有意义。
您可以查看此查询:
SELECT name, is_read_committed_snapshot_on, snapshot_isolation_state
FROM sys.databases;
如果您使用的数据库中有任一标志,那么您就有行版本控制,它本身会为您的行大小添加14个字节。
所以52分解如下: