Informixデータベースからの行の削除

私はInformix DBのテーブルに約3百万行もあります。 新しいデータを読み込む前に、データを削除する必要があります。 その列の1つに主キーがあります。 同じものを削除するために、私はROWIDの使い方を考えました。しかし、私が試したとき

select rowid from table

それは-857エラー[Rowid does not exist]で応答しました。

だから、私は、削除と一緒に行く方法はわかりません。プライマリキーの削除はROWIDの削除と比べてコストがかかるので、プライマリキーを使用しない方がよいです。

上記の提案は参考になります。

2

2 答え

エラー-857が発生すると、表が断片化され、 WITH ROWIDS オプションを使用します。

使用しているInformixのバージョンとプラットフォームは何ですか?

TRUNCATE TABLE ステートメントは、テーブルからすべての行を非常に迅速に削除するように設計されています。

それに失敗すると、あなたはストレートフォワードを使うことができます:

DELETE FROM TableName;

使用可能な十分な論理ログ・スペースがある場合は限ります。それがうまくいかない場合は、主キー(または他の便利な列)の範囲に基づいてDELETE文を繰り返す必要があります。

または、WITH ROWIDS句を使用してテーブルを削除し、それを新しく作成することもできます(特にWITH ROWIDS句を使用することはお勧めしませんが、仮想カラムではなくインデックス付きの物理カラムになります)。非断片化テーブル)。表を削除して再構築する際の欠点の1つは、参照制約を元に戻す必要があり、表の作成時に自動的に削除されるため、表を削除する必要があるためです。

2
追加された

私はこれがIDSであると仮定していますか?..いくつの新しい行がロードされ、どのくらいの頻度でこのプロセスが繰り返されますか?参照制約とビューを再構築する必要がありますが、私の意見では、すべての行を削除するだけで、削除された行は物理的にテーブルの末尾にNULL \ 0フラグが残っているため、最初から作成し、データをロードしてインデックスを作成します。新しい行をロードするときにパフォーマンスが低下する可能性があります。また、新しいインデックスを作成し、可能であれば、最も望ましい順序でロードデータを事前ソートすることもできます(CLUSTERED INDEX)。式やその他の型でテーブルを断片化する場合、ROWIDはウィンドウから出てきますが、テーブルがフラグメント化されないことが確実であればWITH ROWIDSを使用します。あなたのテーブルにシリアルカラムがある場合は、シリアルカラムを外部キーとして使用する他のテーブルはありますか?

1
追加された