1

我很清楚堆中的转发记录是什么。由于我想将转发记录保持在 0,因此我们决定仅更新无法扩展的列。

最近在我的系统上,我遇到了转发记录。表设计是这样的:

CREATE TABLE dbo.test (
 HashValue BINARY(16) NOT NULL,
 LoadTime DATETIME NOT NULL,
 LoadEndTime DATETIME NULL,
[other columns that never get updates]
) WITH(DATA_COMPRESSION=PAGE);

插入语句总是带入所有列,因此没有一个为 NULL。我检查了查询日志。我为 LoadEndTime 插入一个值“9999-12-31”。

现在系统像这样对 LoadTime 执行更新。

;WITH CTE AS (
SELECT *, COALESCE(LEAD(LoadTime) OVER(PARTITION BY HashValue ORDER BY LoadTime) ,'9999-12-31') as EndTimeStamp
)
UPDATE CTE SET LoadEndTime = EndTimeStamp;

由于始终填充 LoadEntTime 列,因此在执行更新时该列不应在行内扩展。它应该是一个适当的更新。在那个过程之后,我仍然总是收到转发记录......这对我来说没有意义......

4

0 回答 0