- ベストアンサー
重複レコードの上書きについて
重複レコードを上書きするSQL構文についての質問です。 SELECT文で更新対象のレコードが、 すでに存在しているかをどうかを確認にしてから、 UPDATE文を発行して更新する方法と、 DELETE文を発行して更新対象のレコードを削除した後に INSERT文で更新文のデータを追加する方法があるのですが、 処理的にはどちらが早くなるのものなんでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
この処理において、単独での処理速度にはあまり価値がありません。 というのも、処理後のすべの操作のレスポンスに重大な影響があるからです。 DBMSの実装と設定パラメータに影響しますが、 DELETEとINSERTを行うと、DELETEして空いた領域に格納されない事があります。 これを繰り返すとデータファイルが虫食いで穴だらけになります。 結果、格納効率が悪化し件数は変わらなくてもファイルだけが肥大化して物理I/Oを増加させます。 現在は知りませんが、旧ACCESSはわかりやすく大きくなっていきました。 まともな DBMS でもクラスタ化係数が悪化してキャッシュヒット率とインデックスの効果を低下させる原因になることもあります。 総じて、そこそこ件数があるテーブルに対してはUPDATEで記述した方が良いです。
その他の回答 (1)
- yukion
- ベストアンサー率42% (3/7)
処理自体は大きな違いはありません。 強いて言えば、DELETE+INSERTの方が記録されるログの量がUPDATEに比べ多くなると考えられます。 SELECTでレコードが見つかる可能性が高いのであればUPDATEを行うのが一般的ですが、追加になるケースがはるかに多いのであればDELETE+INSERTの方がプログラムロジックがシンプルになると思います。
お礼
プログラムはDELETE+INSERTの方が簡単で 気に入っていたんですが、 ログの事は考えてもいなかったです。 参考になる回答ありがとうございました。
お礼
2つの方法のどこが違うのか よく分かっていなかったのですが、 この回答で理解できたと思います。 大変参考になりました。 ありがとうございます。