Как в yii2 наиболее быстро получить выборку 100 записей с пагинацией?

168
24 января 2019, 05:40

В БД есть болеее 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;
    }
Answer 1

Попробуйте частичные индексы:

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/#/

READ ALSO
Как добавить class = “active” к активному элементу меню

Как добавить class = “active” к активному элементу меню

В шаблоне есть код для меню, которое берется из БД

144
Как ждать сообщение от пользователя telegram bot

Как ждать сообщение от пользователя telegram bot

Подскажите пожалуйста, есть telegram botЕсть условие, если клиент написал "Привет" бот скидывает клиенту сообщения "Напишите ваше имя"

146
PHP не создает базу SQLite

PHP не создает базу SQLite

Установлен PHP 71, echo phpinfo() сообщает о подключенном драйвере SQLite

175
ЧПУ ссылки Wordpress

ЧПУ ссылки Wordpress

вообщем в чем проблема есть сайт на вп нужна структура ссылок ЧПУ состояющая из таксономийСразу говорю что статью подсмотрел на каме, под...

191