为什么查询内部查询比PHP中的2个查询慢?

时间:2011-10-20 21:28:09

标签: php mysql subquery

我有这样的查询

UPDATE Table2 
   SET status = 2  
   WHERE user_id in (SELECT user_id FROM Table1 WHERE date > 0)

执行需要10秒钟 我使用php

分成两个查询
q1 ="SELECT user_id FROM Table1 WHERE date > 0"
$q1_res=sql->execq($q1);

for ($i = 0; $i < count($q1_res); $i++) {
    foreach ($q1_res[$i] as $key => $value) {
        if ($key === "user_id") {
            $q1_res_ids .= $value . ",";
        }
    }
}

$q2 ="UPDATE Table2 
       SET status = 2  
       WHERE user_id IN". $q1_res_ids
$sql->execq($q2);

执行时间不到1秒我会认为使用MYSQL会更快吗?

2 个答案:

答案 0 :(得分:1)

如果您第一次执行第二个查询,此后不久您的PHP脚本,可能是Mysql Query Cache已经缓存了select查询的结果,因为查询是相同的。这可以解释执行时间的差异。

答案 1 :(得分:0)

此示例中的子查询是相关查询。也就是说,它为内部查询的每一行运行一次外部查询。因此,如果您有200个用户,日期&gt; 0,您将运行400个查询。

PHP版本只运行子查询一次,然后运行单个查询来更新所有找到的行。