我很清楚堆中的转发记录是什么。 由于我希望将转发记录保持为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);
插入语句总是带来所有列,因此没有任何列留空。我检查了查询日志。 我为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列总是被填充,所以在执行更新时,该行中不应该扩展该列。它应该是一个到位的更新。在这个过程之后,我总是得到转发记录......这对我来说没有意义......