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