2011-01-18 18 views
12

MySQLのinsert ignorereplaceの注文の間にパフォーマンスの面で違いがあるかどうかを知りたいと思います。MySQLで "insert ignore"と置き換えのパフォーマンスの違いは何ですか?

私はMySQL 5.0.31を使用しています。私のテーブルはすべてInnoDBにあります。

+1

異なる点は、アプリケーションの中で最も重要なパフォーマンスを意味するものの、意味を持ちませんが、それでも他の場所で最適化するための経路がもっと明らかになる可能性があります。 –

+0

あなたは正しいですが、かなり大きなテーブル(数万レコード)と高いトラフィックがあります。パフォーマンスが私たちの課題です。 –

+0

この質問には注意してください - 彼らは非常に異なるステートメントですが、問題はそれらが匹敵するという仮定を暗示しているかもしれません(例えば、選択と削除のパフォーマンスの違いについて質問することはあまり意味がありません)。 –

答えて

28

挿入無視 - キー/行が存在する場合は、挿入をスキップ

を置き換える - キー/行が存在する場合、マッチ行を削除し、だから、再び

を挿入し、replaceが遅くする必要があります。
しかし、更新に

詳細insert ignore行いません。http://dev.mysql.com/doc/refman/5.5/en/replace.html

をテーブル内の古い行がPRIMARY KEYのための新しい行と同じ値を持っている場合ことを除いて、正確にINSERTのような作品を交換しますか、 UNIQUE索引では、新しい行が挿入される前に古い行が削除されます。

+0

私はすでに読んでいたが、速すぎて読みたい唯一の文を見つけることができなかった –

+4

交換の根拠をアドバイスする:あなたが外国人ならばDELETEはあなたに泣くだろういくつかの "ON DELETE CASCADE"魔法が続くキーがあります。それはなくなるでしょう。新しい行が挿入されますが、接続テーブルは更新されません。交換すると泣くかもしれません。 – Nanne

+0

@nanne私たちは "DELETE CASCADE ON"の魔法をやってくれていない神に感謝します。 –

0

一般的なコメントです。挿入とは、これまでにあったことが残っていることを意味します。交換するとは、既にそこにあるものが除去の対象となり、挿入のためのアイテムがその場所にインストールされていることを意味します。置き換えアクションは、既に存在するアイテムを本来ターゲットにし、削除して新しいアイテムをインストールする必要があります。

+0

MySQLの場合は必ずしもそうではありません。エントリが存在するかどうかわからない場合はreplaceを使用できます。存在する場合は置き換え、そうでなければ挿入します。 –

関連する問題