たとえば「ABC」というテーブルがあり、この「ABC」テーブルに格納する必要がある行があります。テーブルから削除してから挿入する代わりに、更新する予定です。これがデータベースに与える影響は何ですか? テーブル レベル、ページ レベル、時間、コスト、すべてのこと。
7 に答える
あなたが何を求めているのか 100% 確信があるわけではありませんが、暗闇の中で撮影します。テーブルに対して DELETE を実行してから INSERT を実行して情報を更新することは、非常に悪い考えです。
なんで?ABC を参照する外部キーを持つ別のテーブルがある場合、参照が失われるためです。もちろん、古い (削除された) レコードと同じ PK を使用して新しいレコードの PK を設定しない限りです。その場合、なぜ最初に UPDATE をしなかったのでしょうか?
さらに、DELETING と INSERT は 2 つの操作であるのに対し、UPDATE は 1 つの操作であるため、DELETE と INSERT に (理論的には) より多くの時間がかかります。
使いやすさの要素もあります。DELETE の後に INSERT を実行すると、すべての列の値を手動で追跡する必要があります。更新する場合は、何を変更したいかを知る必要があります。
更新は、テーブルを更新するための簡単で最速の方法です。
DELETE & INSERT 操作は、UPDATE と比較して時間がかかります。行の 1 つの列のみを変更したい場合を考えてください。その後、DELETE と INSERT は複雑になります。
明らかにUPDATEが優先されますが、RDBMSによっては、LOCKを回避するためにDELETE-INSERTが使用されるため、大量の同時アクセスに対応できます。一般的なテクニックです。
一部の DB はディスク上の固定サイズのレコードを使用するため、UPDATE は高速です。その場での施術です。他の一部の DB は、可変サイズのレコードを使用します。そのような DB では、DELETE/INSERT は UPDATE と大差ありません。UPDATE は実際には古いタプル/インデックスを無効としてマークし、新しいタプルを書き込み、ガベージ コレクターが後で無効なタプルを再利用できるようにするためです。
更新は単純な操作である既存の行を変更しますが、削除とそれに続く挿入はデータベースにとってより多くの作業になります。
さらに、ID 列を使用している場合、削除と挿入によって行への参照が破棄される可能性があります。
編集:実際には、更新の代わりに削除と挿入を行いたい場合があります。更新するデータが存在するかどうかがわからない場合は、ロジックを単純化することができます。その場合、行が存在するかどうかをチェックしてから、チェックの結果に基づいて更新または挿入を行うよりも、削除を実行してから挿入を行う方が簡単です。
さらに、使用方法に応じて、ID 列を更新する必要がある場合があります (たとえば、テーブルへの最新の変更を追跡するために使用する場合)。
ただし、一般に、更新を行う方が削除および挿入操作よりも作業が少ないため、可能であれば常に使用する必要があります。
DELETE/INSERT の代わりに UPDATE を使用する主な利点は、行内の変更されたフィールドのみを更新することを選択できることです (これは、DELETE の後に INSERT を実行するよりもはるかに高速です)。
また、UPDATE の利点の 1 つは、ACID データベースの実際の定義である原子性にあります。