Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Есть подключение ко второй БД, она находиться на том же сервере что и основная БД Laravel и собственно сам фреймворк. Если делать прямыми запросами PDO (банальный php-скрипт), а не через Laravel - все быстро очень быстро работает.
А вот через Laravel с каким-то тормозом примерно в 40мс.
Подробности:
Есть таблица городов, из нее по полю ID (primary key) вытаскиваются значения нескольких полей (поля varchar(от 50 до 200 размер)):
SELECT id, name, data1, data2, data3 FROM city WHERE id IN (1,2,3,4,5,6,7,8,9,10)
Запрос выполняется примерно 40-42мс.
Если в запросе передать меньшее кол-во ID, то запрос выполняется за сотые доли миллисекунды:
SELECT id, name, data1, data2, data3 FROM city WHERE id IN (1,2,3,4,5)
Как будто у Laravel есть некий буфер, при переполнении которого запрос по какой-то причине работает медленнее.
Если сделать выборку данных из таблицы по очереди:
SELECT id, name, data1, data2, data3 FROM city WHERE id = 1
SELECT id, name, data1, data2, data3 FROM city WHERE id = 2
...
SELECT id, name, data1, data2, data3 FROM city WHERE id = 10
то они выполняются также быстро, за сотые доли.
Это противоречит законам оптимизации запросов, когда быстрее сделать один запрос с выборкой по перечислению ID.
Пробовал 3 разными способами:
Чистый класс PDO
Класс Laravel "DB" (функции: getPdo(); prepare(); execute(); и все такое)
Laravel "query builder"
Измерял с помощью debugbar https://github.com/barryvdh/laravel-debugbar
Страницы 1