アプリ版:「スタンプのみでお礼する」機能のリリースについて

重複レコードを上書きするSQL構文についての質問です。

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

A 回答 (2件)

この処理において、単独での処理速度にはあまり価値がありません。


というのも、処理後のすべの操作のレスポンスに重大な影響があるからです。

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

総じて、そこそこ件数があるテーブルに対してはUPDATEで記述した方が良いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/16 21:44

処理自体は大きな違いはありません。


強いて言えば、DELETE+INSERTの方が記録されるログの量がUPDATEに比べ多くなると考えられます。
SELECTでレコードが見つかる可能性が高いのであればUPDATEを行うのが一般的ですが、追加になるケースがはるかに多いのであればDELETE+INSERTの方がプログラムロジックがシンプルになると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/16 21:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す