Буферизовані та небуферизовані запити
За промовчанням запити використовують режим буферизації. Це означає, що результати запиту негайно надходять від сервера MySQL до PHP та зберігаються у пам'яті PHP-процесу. Це дозволяє робити додаткові операції, такі як підрахунок кількості рядків та переміщення (пошук) поточного покажчика результату. Це також дозволяє виконувати нові запити в тому ж з'єднанні під час роботи над результатом останнього запиту. Недоліком режиму буферизації є те, що великі набори результатів можуть вимагати досить багато оперативної пам'яті. Пам'ять залишається зайнятою до тих пір, поки всі покажчики на результуючий набір не будуть видалені або результуючий набір не буде звільнений, що автоматично відбувається під час закінчення останнього запиту. Термін "результат збереження" ("store result") також використовується для режиму буферизації, оскільки весь результуючий набір зберігається відразу.
Зауваження :
При використанні libmysqlclient як бібліотека обмеження пам'яті PHP не враховуватиме пам'ять, що використовується для результуючих наборів, якщо дані не будуть збережені в змінні PHP. З mysqlnd облік пам'яті також буде включати розмір результуючого набору.
Небуферизовані MySQL запити виконуються, а потім очікують на отримання даних з сервера MySQL. Це використовує менше пам'яті PHP, але може збільшити навантаження на сервер. Поки повний результуючий набір не буде переданий із сервера, ніякі подальші запити не можуть бути надіслані через це з'єднання. Небуферизовані запити можуть бути відкладені як "use result". Коли всі рядки з набору результатів вилучені, набір результатів зникає і його не можна повторно ітерувати.
Виходячи з цих характеристик, небуферизовані запити слід використовувати лише в тих випадках, коли очікується великий набір результатів, який послідовно оброблятиметься. Небуферизовані запити містять ряд підводних каменів, що ускладнює їх використання, наприклад, кількість рядків у наборі результатів невідома доти, доки не буде вилучено останній рядок. Буферизовані запити - простіший і гнучкий спосіб обробки наборів результатів.
Оскільки буферизовані запити застосовуються за замовчуванням, такі приклади продемонструють, як виконати небуферизовані запити в кожному з API
Приклад #1 Приклад небуферизованого запиту: mysqli
Loading...
Приклад #2 Приклад небуферизованого запиту: pdo_mysql
Loading...