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 их нет) работа с параметрами довольно удобна. Но так же часто отмечается, что производительность ухудшается, если оператор должен быть подготовлен каждый раз, когда он выполняется.

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

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

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