我有一个 SQL Server 表(SQL Server 2012 SP3 标准版),它存储了不同组织的一堆配置信息(基本上是文本 blob)。架构是这样的:
[ConfigurationID] INT IDENTITY (1,1) NOT NULL,
[OrganizationID] INT NOT NULL,
[TimestampUtc] DATETIME NOT NULL,
[ConfigurationData] NVARCHAR (MAX) NOT NULL,
[ChangedBy] NVARCHAR (256) NOT NULL,
[Comment] NVARCHAR (MAX) NOT NULL,
[ChangeType] INT NOT NULL
Run Code Online (Sandbox Code Playgroud)
该TimestampUtc
会一直增加(我将永远不会成为插入“回过时”的条目到表),行永远不会被更新(我只插入新行)。对于某些OrganizationID
s 会有很多行,对于一些非常少,并且OrganizationID
任何时候都可能会插入一个新行。
如果需要,我可以保证的唯一性TimestampUtc
(但如果有一个不需要的解决方案会很棒)。
INSERT 相对较少(每天最多几十次,但通常比这少得多),读取非常频繁(基本上是对我的应用程序的每个 Web 请求)。
我的目标是:
ConfigurationData
的最新信息都应该非常快TimestampUtc
OrganizationID
OrganizationID ASC, TimestampUtc DESC
可能不是一个好主意)。问题
我知道我可以非规范化并只将最新ConfigurationData
值存储在一个表中,并将先前值的历史日志存储在另一个表中,但是仅使用一个表是否可以实现我的目标?最好的方法是什么?(即最好的索引结构是什么?我需要更改有关表架构等的任何内容吗?)
performance index database-design sql-server sql-server-2012