В БД есть болеее 5 000 000 записей. Информации в них не много - фильтрация идёт по одному полю, которое является индексом.
Как максимально быстро получить данные с пагинацией в yii2 То что у меня получается работает минимум по 10 секунд.
В контроллере:
$query = Logs::get_msgs();
$countQuery = clone $query;
$pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize' => 100]);
$pages->pageSizeParam = false;
И в моде
public function get_msgs()
{
$msgs = (new \yii\db\Query())
->select('*')
->from('msgs')->orderBy('date');
$msgs= $msgs->where(['type' => '1']);
return $msgs;
}
Попробуйте частичные индексы:
create index "msgs_type_1_index" ON "msgs" using btree ("type", "date" ASC) WHERE "type" = 1;
analyse "msgs";
В случае, если много данных, то стоит увеличить work_mem:
set work_mem = '100MB' -- значение подбираете самостоятельно, основываясь на explain analyse
Также необходимо настроить сервер бд согласно параметрам вашего сервера. Неплохой сервис для новичков здесь https://pgtune.leopard.in.ua/#/
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости