次の表があります。
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 はソースを表し、タイムスタンプと組み合わせて一意のレコードを表します。
このテーブルは大きくなり、2Hz の更新レートで 2000 の異なるソースがあるとします。
頻繁ではありませんが、ソースを削除して、テーブル内のそのソースのすべてのレコードを削除する必要がある場合があります。問題は、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 で動作する必要があります。