我的脚本需要遍历大量行,分析内容,然后对它们进行更新(选择性地)
显然我有一个循环来评估每一行......
我通常会在这个循环中发出一个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会更容易...
答案 0 :(得分:2)
使用IN (<multiple id's>)
的单个查询应该优于具有一个id
的多个查询。这是因为服务器必须解析您的SQL语句并创建查询计划,并且解析的成本通常与实际执行时间相当。使用100个ID解析一个语句的成本与使用一个ID大致相同。
但是,如果收集的项目数超过100,则更好的方法是创建另一个包含这些ID的表。如果此表具有id
的索引,那么它将是性能的理想选择。