我有这样的查询
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会更快吗?
答案 0 :(得分:1)
如果您第一次执行第二个查询,此后不久您的PHP脚本,可能是Mysql Query Cache已经缓存了select查询的结果,因为查询是相同的。这可以解释执行时间的差异。
答案 1 :(得分:0)
此示例中的子查询是相关查询。也就是说,它为内部查询的每一行运行一次外部查询。因此,如果您有200个用户,日期&gt; 0,您将运行400个查询。
PHP版本只运行子查询一次,然后运行单个查询来更新所有找到的行。