mysql — PHP / SQL — запрос времени загрузки массива

Некоторое время назад у меня возникла эта проблема, из-за которой мой PHP загружался более 20 секунд (даже на хост-машине, содержащей Apache + SQL Server).

Google Chrome Network Report

введите описание изображения здесь

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

 $sql = "SELECT  `date`, `type`, `author`, `commit_file`,
`description`, `commit_num`
FROM  ".$tablename."ORDER BY  date, commit_num, type DESC";

define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);

define('personaname', 'personaname');
define('players', 'players');
define('response', 'response');
define('avatarmedium', 'avatarmedium');

$result = $conn->query($sql);

$retrievedData = $result->fetch_all(MYSQLI_ASSOC);

Последнее подобное (в частности, fetch_all) заставляет страницу загружаться значительно дольше. Я попытался запустить запрос непосредственно в SQL, и это займет всего 0,078 секунды (только 55 записей, так что имеет смысл).

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

Спасибо

0

Решение

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

Пара недостатков, которые сразу выделяются:

  • Ваш запрос сортируется в двух разных направлениях, что может привести к полному сканированию таблицы, если он не проиндексирован правильно.
  • Обычно плохая практика — не ограничивать ваши запросы. Эта таблица может стать очень большой и очень быстрой, вызывая проблемы с распределением ресурсов.
  • Наконец, если вы сталкиваетесь с чем-то таким длительным, вполне вероятно, что ваша память заполнена и перезаписывается на диск. ini_set('memory_limit','16M');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]