gpt4 book ai didi

mysql - 批量更新 mysql 行 : better performance to exclude those already having the value?

转载 作者:行者123 更新时间:2023-11-29 10:11:35 26 4
gpt4 key购买 nike

给出以下查询:

UPDATE large_table SET column_b='' WHERE column_timestamp < 1434365125;

时间戳是一个不断变化的目标,每天都会发生变化。

在后续运行中,查询是否会受益于将“AND column_b != ''”添加到 where 子句,或者 mysql 是否足够智能,可以在后台以某种方式自动添加该查询?这是否记录在某处?

顺便说一句;将其设置为 NULL 而不是空白字符串会提高性能吗?或者这并不重要?表是InnoDB。

最佳答案

column_b 是否已编入索引?写入比读取更昂贵,特别是如果该字段有索引的话。所以是的,性能将会受益。

...is mysql smart enough to sort of add that automatically in a way...

如果 MySQL 这样做的话,那就太不明智了。最大的问题是二进制日志。如果 MySQL 自行决定跳过数据,那么您会在某个时间点遇到麻烦。复制从站会不同步,并且分片(=分区表)在某个时间点会不一致。

MySQL 足够聪明,可以优化您的查询,但那是关于索引、查询缓存、执行路径……它不会以任何方式改变您查询的意图,关于数据本身,没有优化。

最佳实践是在查询之前使用 EXPLAIN 语句,并减少 MySQL 必须调查的行和字段的数量。

另一个优化是排除过去已经更改的行。假设您的查询每天运行一次,您可以添加下限:

WHERE column_timestamp < [today] AND column_timestamp > [today - 2 days]

关于mysql - 批量更新 mysql 行 : better performance to exclude those already having the value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com