PHP PDO: Сколько времени готовятся кешированные запросы mysql?

Как использовать подготовленные заявления для выполнения? Я понимаю, что что-то вроде этого может пригодиться, если я поставлю его в цикле:

SELECT `Name` FROM `Hobbits` WHERE `ID` = :ID; 

Я читал, что цикл с подготовленными операторами быстрее, чем цикл без, но в противном случае подготовленные операторы немного снизили бы производительность. Итак, насколько велика эта петля?

Если я запускаю сложный SQL-запрос в начале моего кода и повторяю его с одним другим параметром в конце – будет ли второй запрос работать быстрее? (Мы используем одно соединение для каждой загрузки страницы). Есть ли ограничение на кешированные запросы, поэтому я лучше повторяю свои запросы сразу?

Как насчет выполнения всего скрипта дважды с помощью тех же параметров (перезагрузить страницу или 2 пользователя)?

Solutions Collecting From Web of "PHP PDO: Сколько времени готовятся кешированные запросы mysql?"

Готовый запрос предоставляется серверу SQL, который анализирует его и, возможно, уже готовит план выполнения. Затем вам в основном предоставляется идентификатор для этих выделенных ресурсов и можно выполнить этот подготовленный оператор, просто заполнив пробелы в инструкции. Вы можете запускать этот оператор так часто, как вам нравится, и базе данных не придется повторять планирование синтаксического анализа и выполнения, что может привести к повышению скорости.

Пока вы не отбрасываете заявление, нет жесткого тайм-аута того, как долго заявление будет «оставаться готовым». Это не кеш, это выделенный ресурс на SQL-сервере. По крайней мере, пока ваш драйвер базы данных использует собственные подготовленные операторы в SQL API. PDO, например, не делает этого по умолчанию, если вы не установите для PDO::ATTR_EMULATE_PREPARES значение false .

Однако в конце выполнения скрипта все эти ресурсы всегда будут освобождены, они не будут сохраняться при разных загрузках страниц. Кроме того, сервер SQL может или не может кэшировать запрос и его результаты в течение некоторого времени независимо от сценария клиента.

Как долго готовятся кешированные запросы mysql?

На самом деле это не «кеш». Подготовленный отчет длится всего лишь во время выполнения скрипта.

Если я запускаю сложный SQL-запрос в начале моего кода и повторяю его с одним другим параметром в конце – будет ли второй запрос работать быстрее?

Чем сложнее запрос, тем меньше эффекта вы увидите. Честно говоря, подготовленный оператор экономит вас только на синтаксический анализ , а если выполнение связано с временным или файрсовым, или приложением, подготовленным для сканирования таблицы, не будет ускорено ни одно из них.

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

Итак, насколько велика эта петля?

Чем больше итераций он получает, тем больше пользы. Тем не менее, в здравом веб-приложении нужно избегать запросов на цикл.

Как насчет выполнения всего скрипта дважды с помощью тех же параметров (перезагрузить страницу или 2 пользователя)?

Как я сказал выше, никакой выгоды от подготовленного заявления не будет. Однако классический кеш запросов скорее всего будет срабатывать.

Как использовать подготовленные заявления для выполнения?

Ни за что. По крайней мере, не в веб-сервисе PHP. В некотором длинном сценарии на основе cli – может быть.

Однако готовые заявления должны использоваться в любом случае с целью получения синтаксически правильных запросов.

FYI, от

http://dev.mysql.com/doc/refman/5.7/en/statement-caching.html

Системная переменная max_prepared_stmt_count контролирует общее количество операторов, к которым кеширует сервер. (Сумма количества подготовленных заявлений на всех сессиях.)