2012-03-26 13 views
3

私はデータベースとしてMySQLを使用しています。私はいくつかのデータを更新する必要があります。しかし、データが変更されていない可能性がありますので、そのような場合に行を更新する必要はありません。アップデートと選択

私は1つが(パフォーマンス的に)良くなるどの知りたいと思った:

a)のデータが変更されたかどうかを判断するために、テーブルを検索します。たとえば、主キーで検索し、残りのフィールドの値が変更されているかどうかを確認できます。はいの場合は更新ステートメントを続行し、そうでない場合はそのままにします。

b)UPDATEクエリを直接使用します。データに変更がない場合、MySQLは自動的に無視し、データの更新は処理しません。

このような場合、どちらの方が優れたパフォーマンスを発揮しますか。

+0

http://blog.mclaughlinsoftware.com/2009/05/25/mysql-merge-gone-awry/ –

+2

を参照してください。c)関連するフィールドで 'UPDATE'ステートメントを修飾してください。例えば' UPDATE myTable SET myField1 = 'value1'、myField2 = 'value2' WHERE uid = myKeyおよび(myField1!= 'value1' OR myField2!= 'value2') ' – jensgram

答えて

3

MySQL manualから:

あなたが現在持っている値に列を設定した場合、MySQLはこの を通知し、それを更新しません。

したがって、待ち時間を省き、そのタスクをMySQLに任せてください。実際に影響を受けた行の数も表示されます。

0

最初のオプションは、私にとってはより良いように見えますが、特定のシーンに適しています。

  • テーブルからすべてまたは一部の行を選択した結果でそれらを取得するには、メモリ内トラバーサルは本当に速い十分にあるとして、結果セットトラバース
  • を設定し、そのレコードを更新したい主キーを拾います更新クエリを実行します。

あなたがそうする必要があるかどうかにかかわらず、各行で更新クエリを実行するのと比べて、私にはそれほど効率的な解決策に見えます。

0

select-then-updateアプローチを使用する場合は、行をロックする必要があります(たとえば、更新を選択します)。そうでなければ競合状態になります。選択した後に行を変更し、変更する必要があります。

@AndreKRが指摘するように、値が同じ場合、MySQLは書き込み操作を実行しないため、updateを使用すると直接2つのクエリを使用するよりも高速です。

関連する問題