MySQL PDO готовится быстрее, чем запрос? Вот что показывает этот простой тест

Вот'Это простой тест, который я выполнил, чтобы быстро понять, какое снижение производительности я бы заплатил за использование подготовленных операторов MySQL PDO, а не за простой запрос. В таблице персонажа 2801 строка. MySQL версии 5.5.28 и PHP версии 5.3.15. Ванильные установки, с какими-либо параметрами по умолчанию. Тесты выполняются на iMac с 8 ГБ.

$pdo = new PDO('mysql:host=localhost;dbname=cwadb_local', 'root', "");
$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
    $pdo->query("select * from person where name_last = 'smith' or true");
}
echo "<p>query: " . (microtime(true) - $start);

$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
    $stmt = $pdo->prepare("select * from person where name_last = :last or true");
    $stmt->execute(array('last' => 'smith'));
}
echo "</p>

prepare/execute: " . (microtime(true) - $start);

и это был выход:

query: 21.010436058044

prepare/execute: 20.74036192894

Который вообще не показывает пенальти. Возможности:

Кеширование подготовленного утверждения действительно работает. (Обратите внимание, я сохранил функцию подготовки внутри цикла.)

Это'фиктивный тест, потому что этоСлишком просто.

Там'Нет теоретической причины, почему подготовка / выполнение должна быть медленнее, и, устав от постоянной критики, разработчики MySQL / PDO / PHP приложили слишком много усилий, чтобы сделать их быстрее, чтобы заставить нас всех замолчать.

Другой?

Это'Здесь много раз говорилось, что использование подготовленных операторов более безопасно, чем использование запроса и с именованными параметрами в PDO (Mysqli не делаетони есть), работать с параметрами довольно удобно. Но это'Так же часто отмечалось, чтоs снижение производительности, если заявление должно быть подготовлено каждый раз, когда оно 'с казнен.

Итак, кто-то может предоставить некоторые тесты, которые противоречат моему простому тесту? Или мы сейчас просто признаем, чтоНет ли причины не использовать подготовленные заявления?

Ответы на вопрос(2)

Ваш ответ на вопрос