2011-10-20 14 views
0

私はこのPHPでクエリ内のクエリが2つのクエリより遅いのはなぜですか?

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

のようなクエリでは、それは私はこれは私がその速いと思うだろう実行するために1秒未満を取った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); 

を使用して2つのクエリに侵入 を実行するために10秒のようにかかっていますMYSQLを使用しますか?

+3

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

+0

[私がしたらどうなるか心配する価値があるかもしれません2つの別個のクエリ、誰か他の人が2つのクエリ間でデータを変更するとどうなりますか? "おそらくこの場合ではないかもしれないが、一般的には] – marnir

答えて

1

最初に2番目のクエリを実行した直後に、PHPスクリプトの直後に、クエリが同一であるため、選択クエリの結果がすでにMysql Query Cacheによってキャッシュされている可能性があります。それは実行時間の違いを説明するでしょう。

0

この例のサブクエリは、相関クエリです。つまり、内部問合せのすべての行に対して外部問合せを1回実行します。したがって、200を超えるユーザーが日付> 0の場合、400のクエリが実行されます。

PHPバージョンではサブクエリが1回だけ実行され、次に単一のクエリが実行されて見つかったすべての行が更新されます。

関連する問題