2011-10-20 3 views
0

나는 그것은 10 초처럼했다이PHP에서 쿼리 내부 쿼리가 2 쿼리보다 느린 이유는 무엇입니까?

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

같은 쿼리가 나는 그것의 빠른에 내가 생각 실행이 걸린

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); 

PHP를 1 초 미만을 사용하여 두 개의 쿼리에 침입 을 실행해야 MYSQL을 사용합니까?

+3

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

+0

[내가한다면 두 개의 개별 쿼리, 다른 누군가가 내 두 쿼리간에 데이터를 수정하면 어떻게됩니까? ". 어쩌면이 경우에는 아니지만 일반적으로] – marnir

답변

1

두 번째 쿼리를 처음 수행 한 직후에 PHP 스크립트를 실행 한 경우 쿼리가 동일하므로 선택 쿼리의 결과가 이미 Mysql Query Cache에 의해 캐시 된 것일 수 있습니다. 그것은 실행 시간의 차이를 설명합니다.

0

이 예제의 하위 쿼리는 상관 쿼리입니다. 즉, 내부 쿼리의 모든 행에 대해 외부 쿼리를 한 번 실행합니다. 따라서 date> 0 인 200 명의 사용자가있는 경우 400 개의 쿼리를 실행하게됩니다.

PHP 버전은 하위 쿼리를 한 번만 실행 한 다음 단일 쿼리를 실행하여 발견 된 모든 행을 업데이트합니다.

관련 문제