使用WHERE pkey运行更新IN()比单个更新语句
更优化update table_name set col='val' where primary_key in (..)
VS
update table_name set col='val' where primary_key = xx1
update table_name set col='val' where primary_key = xx2
...
在包含数百万行的表格上将有1000次更新。
答案 0 :(得分:1)
是的,IN ()
要快得多,因为查询优化器可以执行1次密钥索引,更新1次匹配中的多行。只要括号中没有SELECT,它就会更快。
关于要在括号中打包多少个ID,找出部署服务器的最大数据包大小,并根据最长的INT处理基数为10的数据来计算。
答案 1 :(得分:0)
执行更少的查询而不是更多的查询几乎总是更好,因为这使服务器有机会优化操作。也就是说,我认为任何服务器都不会让你将数百万个值参数传递给in()
子句,所以你可能想要批量处理,更新,或者一次50个,或类似的东西。
答案 2 :(得分:0)
我认为IN会更快,但会受到参赛人数的限制。在大多数情况下,您将无法创建100K SQL。解析时间也变得很重要,因为数据库解析可能没有针对大型SQL进行优化。 与此同时,我想说主键的更新本身就是昂贵的操作。从更改的某个百分比来看,使用更新的数据创建新表会更快,然后重新编制索引。