MySQL使用主键加额外WHERE条件执行UPDATE操作是否会变慢?
结论
你的猜测完全正确,第二条UPDATE语句的执行速度不会慢于第一条,绝大多数场景下执行效率反而更高。
原因分析
- 两个语句的WHERE条件都包含主键
id=5000,MySQL优化器都会优先走主键索引定位到唯一的目标行,这一步的IO开销、查询开销完全一致,没有任何差异。 - 定位到行数据后,第二条语句多出来的
bar1=0判断只是对内存中已加载的行数据做一次整数比较,CPU开销可以忽略不计,不会对执行速度产生负面影响。 - 如果目标行当前的
bar1值已经不等于0,第二条语句会直接跳过后续的更新流程,不需要执行写binlog、刷脏页、维护索引(如果bar1建有索引)等一系列写操作开销,这种场景下执行速度会远快于第一条语句。
并发逻辑说明
你使用第二条语句做并发控制的方案是完全合理的,这属于乐观锁的轻量化实现:不需要额外加锁等待,只有符合bar1=0条件的第一个请求能更新成功,正好满足多客户端并发更新只有一个成功的需求,不会产生额外性能损耗,还能减少大量无效写操作。
内容的提问来源于stack exchange,提问作者cr001
相关产品推荐
相关产品推荐

