【发布时间】:2017-09-04 13:27:33
【问题描述】:
我正在调整一个审计方案:https://weblogs.asp.net/jongalloway/adding-simple-trigger-based-auditing-to-your-sql-server-database,它要求创建一个这样的审计表:
CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),
PrimaryKeyField varchar(1000),
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserNamevarchar(128)
)
我想确保尽可能少地存储插入到Audit 表中的每一行。就我而言,我可以缩短TableName、PrimaryKeyField、PrimaryKeyValue 和FieldName 的宽度,因为我知道这些东西的实际最大长度。我有一个特定的表,它的特定列定义为 nvarchar(2000),所以如果我继续使用这种通用方法,我需要将 nvarchar(2000) 用于 OldValue 和 NewValue。
我想知道关于页面中实际使用的存储空间的 SQL Server 内部优化。当使用 long varchars 或 nvarchars 存储行时,是实际用于将行存储在页面中的完整定义长度,还是 SQL Server 仅存储实际使用的字节。比如上面OldValue中只存储了Hello!,那么OldValue在页面中实际占用多少字节呢?
【问题讨论】:
标签: sql-server sql-server-performance