以下是两个查询。从查询优化的角度来看,哪一个好。
//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';
谢谢, 约格
以下是两个查询。从查询优化的角度来看,哪一个好。
//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';
谢谢, 约格
我认为如果您不强制 MySQL 将字符串转换为整数,那么差异将可以忽略不计。如果类型是整数,请不要将值括在引号中:
UPDATE `table_name` SET `column` = 455 WHERE `row_id` = 433200;
和
UPDATE `table_name` SET `column` = `column` + 1 WHERE `row_id` = 433200;
但是,查询说明了两件不同的事情。第一个是您明确设置值的地方,它不是线程安全的。如果您有两个或多个会话,都试图增加值,无论最后运行的哪个都会设置该值,并且很可能其他值会丢失。例如,如果三个连接同时运行查询,则该值可能只增加一次。为避免这种情况,您必须在 SELECT 之前显式锁定表并在 UPDATE 之后释放它。
增加值的第二个查询是线程安全的。如果三个连接都同时运行查询,则该值将增加三倍。
我建议row_id
,column
不是字符串而是整数。如果是这样,为什么您要求 mysql 为您转换类型。
我认为第一个查询更快
在第二个你有 2 额外的操作 - 获得价值和加法