Laravel замедляет задержку запросов mysql

#mysql #laravel-5

#mysql #laravel-5

Вопрос:

 echo "nexec first time:";
$currentTime = microtime(true);
$users->paginate($request->length, ['*'], 'page', $request->start/$request->length   1);
echo microtime(true) - $currentTime;

echo "nexec second time:";
$currentTime = microtime(true);
$users->paginate($request->length, ['*'], 'page', $request->start/$request->length   1);
echo microtime(true) - $currentTime;
 

Выше приведен код в моем контроллере для тестирования задержки при запросе mysql. Как вы можете видеть, я выполняю одну и ту же команду дважды. Задержка выполнения отличается.

 exec first time: 2.7011959552765
exec second time: 0.78873896598816
 

Приведенное выше является результатом производительности. Во время документа Laravel поставщик сервера содержит шаблон DI для совместного использования подключения к БД. Если мы не воссоздаем соединение, то что произошло, это результат?
Если результат принадлежит recreation, то как я могу поделиться пулом соединений?

Ответ №1:

На «холодном» сервере все находится на диске. Для выполнения запроса необходимо поместить данные в оперативную память. Обычно это означает, что при первом запуске запроса требуется X секунд; во второй раз это занимает больше X / 10 секунд.

Другая проблема связана с «разбиением на страницы», особенно если это делается через LIMIT и OFFSET . Все строки «смещения» должны быть перешагнуты. Итак, по мере того, как пользователь просматривает данные, страницы будут появляться все медленнее и медленнее — из-за перехода через все больше и больше строк. http://mysql.rjweb.org/doc.php/pagination