1

このクエリでパフォーマンスが向上しますか:

UPDATE tbl SET field = 1 WHERE field != 1

この上に

UPDATE tbl SET field = 1

SQL パーサーは、既に field = 1 である行を更新する必要がないことを既に認識していますか?

4

2 に答える 2

4

この条件によりfield != 1、特にほとんどの値がすでに 1 である場合に、処理速度が向上する可能性があります。インデックスが最適化に使用できると仮定すると、データベース エンジンは、その場合、ほとんどのレコードの検査を回避できます。

さらに重要なのは、クエリが同じ結果にならない可能性があることです。いずれかのfield値が NULL の場合、最初の UPDATE ステートメントはそれらの値を更新しません。2 番目のクエリは、NULL を に設定します1

それらが同等ではない別の (かなり明白な) ケースは、UPDATE トリガーが 2 番目のクエリ (条件なし) のすべてのレコードに対して起動するが、スキップされた行の最初のクエリに対して起動しないことです。

于 2012-04-18T22:28:16.020 に答える
3

であるフィールドが数個しかない場合は、句!= 1を追加することでパフォーマンスが確実に向上します。MySQL が値をディスクに書き込まWHEREなかったとしても、値を書き込む必要があるかどうかを確認するためにすべての行を調べる必要がありますが、それ自体で句を追加するわけではありません。WHERE

于 2012-04-18T22:27:19.357 に答える