我们有下表:
CREATE TABLE TagValueDouble(
TagIdentity [int] NOT NULL,
TimestampInUtcTicks [bigint] NOT NULL,
DoubleValue [float] NULL,
CONSTRAINT [PK_TagValueDouble] PRIMARY KEY CLUSTERED
(
TagIdentity ASC,
TimestampInUtcTicks ASC
)
该表充满了来自不同来源(例如风速)的许多测量值。TagIdentity,代表来源,结合时间戳代表唯一的记录。
这个表变大了,比如 2000 个不同的源,更新率为 2Hz。
不经常,但有时我们删除一个源,我们需要删除表中该源的所有记录。问题是使用 NHibernate 查询超时。
我的计划是一次删除 X 行不再属于系统的记录。类似的东西:
DELETE FROM TagValueDouble
WHERE TagIdentity in
(SELECT TOP 10 TagIdentity, TimestampInUtcTicks
FROM TagValueDouble
Where TagIdentity not in (12, 14))
但这不起作用。
关于如何在不冒超时风险的情况下清理桌子的任何想法?
我正在寻找稳定性而不是性能。删除源的所有值是很少做的事情。
PS。它必须在 SQL Server、Oracle、Posgres 和 SQL CE 上工作。