1

次に 2 つのクエリを示します。クエリ最適化の観点から、どれが良いか。

//Query 1
UPDATE `table_name` SET `column` = '455' WHERE `row_id` = '433200';

//Query 2
UPDATE `table_name` SET `column` = `column`+1 WHERE `row_id` = '433200';

ありがとう、ヨグ

4

2 に答える 2

3

MySQL に文字列を整数に変換させなければ、違いはごくわずかだと思います。型が整数の場合、値を引用符で囲まないでください。

UPDATE `table_name` SET `column` = 455 WHERE `row_id` = 433200;

UPDATE `table_name` SET `column` = `column` + 1 WHERE `row_id` = 433200;

ただし、クエリは 2 つの異なることを示しています。明示的に値を設定する最初のものは、スレッドセーフではありません。2 つ以上のセッションがある場合、どちらも値をインクリメントしようとすると、最後に実行した方が値を設定し、他の値が失われる可能性が高くなります。たとえば、3 つの接続が同時にクエリを実行した場合、値は 1 回だけ増加する可能性があります。これを回避するには、SELECT の前にテーブルを明示的にロックし、UPDATE の後に解放する必要があります。

値をインクリメントする 2 番目のクエリは、スレッド セーフです。3 つの接続がすべて同時にクエリを実行した場合、値は 3 回増加します。

于 2012-05-24T14:51:37.783 に答える
1

row_idは文字列でcolumnはなく整数であることをお勧めします。もしそうなら、なぜmysqlにタイプを変換するように頼むのですか?

最初のクエリの方が速いと思います

2 番目に、値の取得と追加の 2 つの追加操作があります。

于 2012-05-24T14:36:22.137 に答える