Почему запрос внутри запроса медленнее, чем 2 запроса в PHP? - PullRequest
0 голосов
/ 21 октября 2011

У меня есть такой запрос

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 ]

1 голос
/ 21 октября 2011

Если вы впервые выполнили второй запрос, а вскоре после этого ваш PHP-скрипт, вполне вероятно, что результат запроса select уже был кэширован Mysql Query Cache , поскольку запросы идентичны.Это объясняет разницу во времени исполнения.

0 голосов
/ 22 декабря 2011

Подзапрос в этом примере является коррелированным запросом.То есть он выполняет внешний запрос один раз для КАЖДОЙ строки внутреннего запроса.Таким образом, если у вас 200 пользователей с датой> 0, вы будете выполнять 400 запросов.

Версия PHP запускает подзапрос только один раз, а затем выполняет один запрос для обновления всех найденных строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...