1

Time32 列と多数の行を持つテーブルが 1 つあります。私の問題は次です。

テーブルが数千万行に達したら、指定した値よりも古いすべての行のアーカイブを開始したいと考えています。クエリを作成するには、行で収集されたデータのタイムスタンプを表す Time32 列を使用します。したがって、このクエリを使用して、作業テーブルの古い行を削除し、アーカイブ レコードを格納するために予約されている別のテーブルに格納します。出来ますか?はいの場合、最も効率的な方法は何ですか?

whereAppend() メソッドについては知っていますが、このメソッドはレコードをコピーするだけで、実際のテーブルからは削除しません。アドバイスありがとうございます。乾杯!

4

1 に答える 1

1

特定のデータベースの 1 つのテーブルから別のテーブルにレコードをアーカイブする一般的な方法は、レコードをターゲット テーブルにコピーしてから、元のテーブルの同じレコードを削除することです。

つまり、データベース エンジンとその上に構築された言語の機能に応じて、アトミックな「コピーしてから削除」を実行するアトミック クエリ コマンドを作成できますが、それはデータベース エンジンの機能に依存します。

古いレコードのアーカイブの場合、堅牢なアプローチは、n個のレコードのブロックをコピーすることにより、アーカイブしたいレコードをチャンクごとにコピーすることです( n は、一時的に複製できるデータの量に合わせてサイズ調整されます。一時的な追加のサイズとコピー削除アクションのオーバーヘッド)、次にそれらの n レコードを削除し、指定されたタイムスタンプしきい値よりも古い条件 Time32 フィールドを満たすすべてのレコードをアーカイブするまで同様に続けます。

于 2012-05-08T11:16:52.790 に答える