2011-10-20 72 views
0

我有這樣爲什麼在PHP中查詢內部查詢比2個查詢慢?

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?

+3

提示:['explain'](http://dev.mysql.com/doc/refman/5.6/en/using-explain.html) –

+0

[這可能也值得擔心,比如「如果我做兩個單獨的查詢,如果其他人修改我的兩個查詢之間的數據會發生什麼?「。也許不是在這種情況下,但總的來說] – marnir

回答

1

如果您第一次執行第二個查詢,並且此後不久,您的PHP腳本很可能由於查詢是相同的,所以select查詢的結果已被緩存了Mysql Query Cache。這將解釋執行時間的差異。

0

本例中的子查詢是一個相關的查詢。也就是說,它爲內部查詢的每一行運行一次外部查詢。所以如果你有200個用戶,日期> 0,你將會運行400個查詢。

PHP版本只運行一次子查詢,然後運行一個查詢來更新所有找到的行。