Имеется таблица alog с содержанием:
id || userid || text
================================
1 || 12000 || действие1
...
15014 || 49621 || дейтсвие15014
...
32194 || 6700 || действие32194
Соответственно, более 32 тысяч строк.
Обращаюсь к таблице:
$request=$mysqli->query("
SELECT `alog`.`text`,`users`.`login`,`alog`.`userid`
FROM `alog`
JOIN `users`
ON `alog`.`userid`=`users`.`id`
ORDER BY `alog`.`id` DESC
LIMIT 6
");
Затем обрабатываю для каждой строки:
for($i=0;$i<mysqli_num_rows($request);$i++)
{
$rows=$request->fetch_assoc();
echo '<p class="category">'.$rows['login'].' - '.$rows['text'].'</p>';
}
Запрос выполняется несколько секунд.
Какие есть способы сократить время выполнения запроса к таблице с большим количеством строк? Возможно, какие-то дополнительные библиотеки.
Попробуйте переписать запрос так:
SELECT `alog`.`text`,`users`.`login`,`alog`.`userid`
FROM (select * from alog order by id desc limit 6) `alog`
JOIN `users`
ON `alog`.`userid`=`users`.`id`
ORDER BY `alog`.`id` DESC
В вашем изначальном запросе MySQL сначала получает все записи из alog, подбирает подходящих для них пользователей и только после этого сортирует всю выборку и берет первые 6 записей.
В варианте с подзапросом, MySQL сначала получает 6 записей, причем скорее всего использует индекс по полю id и не проходит по всей таблице и даже не использует сортировку, так как из индекса записи выбираются сразу в нужном порядке. И только после этого подбирает подходящих пользователей именно для этих 6 записей.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей