質問: Informixデータベースからの行の削除 私はInformix DBのテーブルに約3百万行もあります。 新しいデータを読み込む前に、データを削除する必要があります。 その列の1つに主キーがあります。 同じものを削除するために、私はROWIDの使い方を考えました。しかし、私が試したとき ``` select rowid from table ``` それは-857エラー[Rowid does not exist]で応答しました。 だから、私は、削除と一緒に行く方法はわかりません。プライマリキーの削除はROWIDの削除と比べてコストがかかるので、プライマリキーを使用しない方がよいです。 上記の提案は参考になります。
回答: エラー-857が発生すると、表が断片化され、 [`WITH ROWIDS`](https://publib.boulder.ibm.com/infocenter/idshelp/v117/topic/com.ibmなしで作成された可能性があります。 sqls.doc/ids_sqs_0259.htm ) オプションを使用します。 使用しているInformixのバージョンとプラットフォームは何ですか? TRUNCATE TABLE ステートメントは、テーブルからすべての行を非常に迅速に削除するように設計されています。 それに失敗すると、あなたはストレートフォワードを使うことができます: ``` DELETE FROM TableName; ``` 使用可能な十分な論理ログ・スペースがある場合は限ります。それがうまくいかない場合は、主キー(または他の便利な列)の範囲に基づいてDELETE文を繰り返す必要があります。 または、WITH ROWIDS句を使用してテーブルを削除し、それを新しく作成することもできます(特にWITH ROWIDS句を使用することはお勧めしませんが、仮想カラムではなくインデックス付きの物理カラムになります)。非断片化テーブル)。表を削除して再構築する際の欠点の1つは、参照制約を元に戻す必要があり、表の作成時に自動的に削除されるため、表を削除する必要があるためです。