MySQLでは、すでに削除や挿入しているのか、あるいはより迅速に更新で既存の行?
-
26-09-2019 - |
質問
まず、についてお話ししましょうというのを使っているPHPの枠組みYiiさんになっていただきたい圏内で定義されたSQL文が可能です。知っていたように、一つの巨大な長いるSQL文をうかがいない碁あります。
何を想像していテーブルのユーザーとテーブルFavColors.そして形ユーザーを選択することができ色の嗜好によるチェックはチェックボックスから大型のリストのメーカー。
その結果として格納されており、複数の行のFavColorsテーブルはこのような形になります。(id,user_id,color_id).
このユーザーが変色す。このシナリオのうえで、最も効率的な方法で、色好みのデータベース?
オプション1:
- な量の削除のすべての行の場合user_id
- その大量挿入のすべての新しい行
オプション2:
- をそれぞれの定格電流行ない、更新し
- 場合により多くの行が必要に挿入しています。
- が行する必要は削除され、います。
私のようなオプションではinnodbストレージエンジンがう感じについての削除を行う可能性とのバランとほぼ同じデータです。あるもののidは自動的に高い価値をより早く、わからない場合は避けるべきます。
オプション2を必要とさらに多くを言うのも防止の場合でいいの行を削除するかを設定することができます。しかし、加荷重PHPあたりの価値の減少負荷イナリを使用しています。
意思い?いますか?
解決
UPDATE
が多くなります。き UPDATE
, テーブルで録っているだけ書き換えた新しいデータです。完了していない商品については、これを再 INSERT
.
き DELETE
, の場合、インデックスは、更新することが望ましいか、削除の列のカラムの修正を行う必要があり)およびデータブロックされる場合がありがございますのでご注意下さ PCTFREE
限り正確に記入してください。また削除を加えた新しい変化記録のIdにスレーブはデータベースのルールなので、これらのレコードに関係を有する折れや、必要な更新。なったと思い UPDATE
.
だからだ。 INSERT ... ON DUPLICATE KEY UPDATE
の代わりに REPLACE
.
前者は、 UPDATE
運転の場合はキー違反、後者は DELETE / INSERT
更新: 以下に例を示します INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
詳しくは読み取更新 文書
他のヒント
フィリップ、 あなたが準備された文をやってみましたがありますか?準備された文と異なるパラメータを持つあなたができるバッチ1つのクエリと複数回それを呼び出します。あなたのループの終わりには、ネットワーク遅延の最小量でそれらのすべてを実行することができます。私はPHPでプリペアドステートメントを使用して、それは素晴らしい作品。もう少しJavaの準備された文よりも混乱。