在下面的2个查询案例中,较快的一种:
update t set v = case when id = 1000000 then 100 when id = 10000000 then 500 else v end
要么
update t set v = 100 where id = 1000000;
update t set v = 500 where id = 10000000;
表t在id上具有唯一索引,并且表可能很大(上百万个条目)。
我的猜测是,尽管第二种情况下会进行多个查询,但它仍会更快,因为它可以使用索引来查找条目,而在第一种情况下,它会对表进行完全扫描(但这只是一种猜测,我实际上没有关于MySQL如何处理CASE控制流程的线索。
预先感谢您的任何答复!
最佳答案
您拥有的第二个版本会更好,更清洁,但是,也可以使用更清洁的单个更新来利用“ id”列上的索引...
update t
set v = if( id = 1000000, 100, 500 )
where id in ( 1000000, 10000000 )