• ベストアンサー

重複レコードの上書きについて

重複レコードを上書きするSQL構文についての質問です。 SELECT文で更新対象のレコードが、 すでに存在しているかをどうかを確認にしてから、 UPDATE文を発行して更新する方法と、 DELETE文を発行して更新対象のレコードを削除した後に INSERT文で更新文のデータを追加する方法があるのですが、 処理的にはどちらが早くなるのものなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.2

この処理において、単独での処理速度にはあまり価値がありません。 というのも、処理後のすべの操作のレスポンスに重大な影響があるからです。 DBMSの実装と設定パラメータに影響しますが、 DELETEとINSERTを行うと、DELETEして空いた領域に格納されない事があります。 これを繰り返すとデータファイルが虫食いで穴だらけになります。 結果、格納効率が悪化し件数は変わらなくてもファイルだけが肥大化して物理I/Oを増加させます。 現在は知りませんが、旧ACCESSはわかりやすく大きくなっていきました。 まともな DBMS でもクラスタ化係数が悪化してキャッシュヒット率とインデックスの効果を低下させる原因になることもあります。 総じて、そこそこ件数があるテーブルに対してはUPDATEで記述した方が良いです。

fantom
質問者

お礼

2つの方法のどこが違うのか よく分かっていなかったのですが、 この回答で理解できたと思います。 大変参考になりました。 ありがとうございます。

その他の回答 (1)

  • yukion
  • ベストアンサー率42% (3/7)
回答No.1

処理自体は大きな違いはありません。 強いて言えば、DELETE+INSERTの方が記録されるログの量がUPDATEに比べ多くなると考えられます。 SELECTでレコードが見つかる可能性が高いのであればUPDATEを行うのが一般的ですが、追加になるケースがはるかに多いのであればDELETE+INSERTの方がプログラムロジックがシンプルになると思います。

fantom
質問者

お礼

プログラムはDELETE+INSERTの方が簡単で 気に入っていたんですが、 ログの事は考えてもいなかったです。 参考になる回答ありがとうございました。

関連するQ&A