我有一个每周更新自己的脚本。我的主机发出警告,我一直在用脚本重载服务器。我收集的问题是我使用了太多的UPDATE查询(我的8000多个用户都有一个)。
我知道,编码很糟糕。所以现在我需要将所有数据整合到一个SQL查询中并立即更新所有数据。我希望这能解决我的问题。
一个简单的问题。如果我添加纯粹添加由分号分隔的UPDATE查询,如下所示:
UPDATE table SET something=3 WHERE id=8; UPDATE table SET something=6 WHERE id=9;
然后用一个大的SQL代码更新数据库而不是每次更新查询数据库,它会更快吗?
这是将UPDATE语句“聚集”在一起的最佳方式吗?这会显着减少服务器负载吗?
答案 0 :(得分:2)
使用您的值制作带分隔符的文件,并使用等效的MySQL LOAD DATA INFILE。这将比UPDATE快得多。
LOAD DATA INFILE '/path/to/myfile'
REPLACE INTO TABLE thetable(field1,field2, field3)
//optional field and line delimiters
;
答案 1 :(得分:1)
您最好的选择是通过“某些”字段批量处理这些陈述:
UPDATE table SET something=3 WHERE id IN (2,4,6,8)
UPDATE table SET something=4 WHERE id IN (1,3,5,7)
当然,对您的要求一无所知,可能有更好的解决方案......
答案 2 :(得分:0)
它将改善IO,因为只有一次往返,但数据库“努力”将是相同的。
答案 3 :(得分:0)
SQL的好奇心是以下整数表达式 (1 -abs(符号(A-B)))如果A == B则= 1,否则为0。为方便起见,我们可以调用此表达式_eq(A,B)。 所以
更新表设置东西= 3 * _eq(id,8)+ 6 * _eq(id,9) 其中id为(8,9);
将使用单个更新语句执行您想要的操作。