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字节的值?
谢谢,风
我相信你的数据库中有行版本控制,然后才有意义。
您可以查看此查询:
SELECT name, is_read_committed_snapshot_on, snapshot_isolation_state
FROM sys.databases;
如果您正在使用的数据库中有任一标志,那么您将进行行版本控制,它本身会为您的行大小添加14个字节。
所以52分解如下: