如果尚未设置,如何更新数据库......它是否节省内存?
How to update database if not already set... and does it save memory?
我想更新一个尚未设置的值。
假设我有 table "shipping" 字段名为 "status"。
有些设置为发货,有些则没有。
我有一些 ID,如果尚未设置,我想将状态更新为已发货。
A) UPDATE shipping SET status = "shipped" WHERE ID in (2, 4, 6) AND status != "shipped"
这是我目前所拥有的
B) 它甚至可以节省内存以仅更新需要它的内存吗?
可能,取决于您的 table 架构和索引
mysql设置字段时已经比较旧内容,如果更新后内容不变则不写入该行。
但是,要测试旧内容,必须加载该行。如果您有很多列,这可能会占用时间和内存(mysql 在内部将 varchar 列解包到它们的最大宽度)。
但是如果查询可以使用包含状态的索引(例如 add index (ID, status)
)并且您正在明确检查查询中的状态,那么它可以检查哪些行必须从快速更改为-读取索引并可以省略加载行仅用于测试是否需要更新它们。
我想更新一个尚未设置的值。
假设我有 table "shipping" 字段名为 "status"。 有些设置为发货,有些则没有。 我有一些 ID,如果尚未设置,我想将状态更新为已发货。
A) UPDATE shipping SET status = "shipped" WHERE ID in (2, 4, 6) AND status != "shipped"
这是我目前所拥有的
B) 它甚至可以节省内存以仅更新需要它的内存吗?
可能,取决于您的 table 架构和索引
mysql设置字段时已经比较旧内容,如果更新后内容不变则不写入该行。
但是,要测试旧内容,必须加载该行。如果您有很多列,这可能会占用时间和内存(mysql 在内部将 varchar 列解包到它们的最大宽度)。
但是如果查询可以使用包含状态的索引(例如 add index (ID, status)
)并且您正在明确检查查询中的状态,那么它可以检查哪些行必须从快速更改为-读取索引并可以省略加载行仅用于测试是否需要更新它们。