小编Eug*_*e O的帖子

优化表/索引以获取最新行(按额外的一列过滤)

我有一个 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会一直增加(我将永远不会成为插入“回过时”的条目到表),行永远不会被更新(我只插入新行)。对于某些OrganizationIDs 会有很多行,对于一些非常少,并且OrganizationID任何时候都可能会插入一个新行。

如果需要,我可以保证的唯一性TimestampUtc(但如果有一个不需要的解决方案会很棒)。

INSERT 相对较少(每天最多几十次,但通常比这少得多),读取非常频繁(基本上是对我的应用程序的每个 Web 请求)。

我的目标是:

  • 无论表的大小如何,获取给定ConfigurationData的最新信息都应该非常快TimestampUtcOrganizationID
  • INSERT 性能并不重要,但我想尽可能避免可怕的索引碎片(所以我对唯一聚集索引的第一个想法OrganizationID ASC, TimestampUtc DESC可能不是一个好主意)。

问题

我知道我可以非规范化并只将最新ConfigurationData值存储在一个表中,并将先前值的历史日志存储在另一个表中,但是仅使用一个表是否可以实现我的目标?最好的方法是什么?(即最好的索引结构是什么?我需要更改有关表架构等的任何内容吗?)

performance index database-design sql-server sql-server-2012

6
推荐指数
1
解决办法
125
查看次数