使用WHERE IN()或单个查询进行更新的查询之间是否存在任何差异

时间:2011-02-16 17:13:24

标签: mysql optimization

使用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次更新。

3 个答案:

答案 0 :(得分:1)

是的,IN ()要快得多,因为查询优化器可以执行1次密钥索引,更新1次匹配中的多行。只要括号中没有SELECT,它就会更快。

关于要在括号中打包多少个ID,找出部署服务器的最大数据包大小,并根据最长的INT处理基数为10的数据来计算。

答案 1 :(得分:0)

执行更少的查询而不是更多的查询几乎总是更好,因为这使服务器有机会优化操作。也就是说,我认为任何服务器都不会让你将数百万个值参数传递给in()子句,所以你可能想要批量处理,更新,或者一次50个,或类似的东西。

答案 2 :(得分:0)

我认为IN会更快,但会受到参赛人数的限制。在大多数情况下,您将无法创建100K SQL。解析时间也变得很重要,因为数据库解析可能没有针对大型SQL进行优化。 与此同时,我想说主键的更新本身就是昂贵的操作。从更改的某个百分比来看,使用更新的数据创建新表会更快,然后重新编制索引。