PHP PDOStatement-> выполнить очень медленно - PullRequest
2 голосов
/ 08 сентября 2011

Если я выполню какой-либо запрос с помощью phpmyadmin, он отобразит истекшее время 0,0002 секунды, то есть 0,2 миллисекунды.Если я выполняю тот же запрос через PHP с использованием PDO, истекшее время (только для третьей строки в приведенном ниже примере кода) составляет 20 миллисекунд.

$db = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::ATTR_PERSISTENT => true));
$cmd = $db->prepare($sql);
$cmd->execute(array($p1, $p2, $p3, $p4));

Что не так с этим кодом?

Ответы [ 3 ]

3 голосов
/ 08 сентября 2011

Ничего, кроме того факта, что вы сначала готовите оператор, а затем выполняете, что займет (немного) больше времени.Это должно не вызывать тот факт, что это в сто раз медленнее.Попробуйте объяснить запрос (EXPLAIN SELECT) и посмотрите, что он делает.Мне трудно поверить, что использование подготовленного утверждения намного медленнее.

2 голосов
/ 08 сентября 2011

Прежде всего, PhpMyAdmin дословно выполняет запрос. PDO должен подготовить запрос, проанализировать ваши параметры, связать их, и затем выполнить его. Это несправедливое сравнение.

Во-вторых, я не уверен, что измерения, которые вы получаете, являются точными (0,2 мсек - это очень быстро, я не ожидал бы этого для любого запроса).

1 голос
/ 08 сентября 2011

Если второй запрос быстрее, это, вероятно, время соединения. Соединение с БД инициализируется при отправке первого запроса.

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