只是想确认通过IN运行单个mySQL UPDATE是否比多个查询更快

时间:2013-04-17 03:43:12

标签: mysql performance

我的脚本需要遍历大量行,分析内容,然后对它们进行更新(选择性地)

显然我有一个循环来评估每一行......

我通常会在这个循环中发出一个SQL UPDATE查询(对于正在评估的当前行)...事实上我喜欢这样更好,更直接清理我的代码等。     $ q =“UPDATE mytable SET status ='online'WHERE id = '22'”;

但是最近我一直在使用“IN”子句..循环会在csv中收集id然后再进行;

if ids exist do query 
    $q = "UPDATE mytable SET status='online' WHERE id IN(22,25,147)";

两种技术中的任何一种都显着更好吗?事实上?或者我也可以坚持在哪里,我很舒服...

是的,对于我必须要执行的代码和其他任务,在循环中激活单个UPDATE SQL会更容易...

1 个答案:

答案 0 :(得分:2)

使用IN (<multiple id's>)的单个查询应该优于具有一个id的多个查询。这是因为服务器必须解析您的SQL语句并创建查询计划,并且解析的成本通常与实际执行时间相当。使用100个ID解析一个语句的成本与使用一个ID大致相同。

但是,如果收集的项目数超过100,则更好的方法是创建另一个包含这些ID的表。如果此表具有id的索引,那么它将是性能的理想选择。