1

以下是两个查询。从查询优化的角度来看,哪一个好。

//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;

但是,查询说明了两件不同的事情。第一个是您明确设置值的地方,它不是线程安全的。如果您有两个或多个会话,都试图增加值,无论最后运行的哪个都会设置该值,并且很可能其他值会丢失。例如,如果三个连接同时运行查询,则该值可能只增加一次。为避免这种情况,您必须在 SELECT 之前显式锁定表并在 UPDATE 之后释放它。

增加值的第二个查询是线程安全的。如果三个连接都同时运行查询,则该值将增加三倍。

于 2012-05-24T14:51:37.783 回答
1

我建议row_idcolumn不是字符串而是整数。如果是这样,为什么您要求 mysql 为您转换类型。

我认为第一个查询更快

在第二个你有 2 额外的操作 - 获得价值和加法

于 2012-05-24T14:36:22.137 回答