За последние 24 часа нас посетили 22187 программистов и 1074 робота. Сейчас ищут 643 программиста ...

Paginate для 2M строк.

Тема в разделе "Laravel", создана пользователем EvgeniyTSI, 16 мар 2020.

  1. EvgeniyTSI

    EvgeniyTSI Активный пользователь

    С нами с:
    24 фев 2020
    Сообщения:
    16
    Симпатии:
    2
    Адрес:
    Rostov-on-Don
    Господа, имеем sql базу в 2млн строк.
    Получаем модель как всегда:
    $articles = Article::paginate(10);

    При таком размере базы получаем дикие тормоза. Руководства предлагают использовать метод simplePaginate(10);
    Ну да, он подсчет не производит и работает побыстрее. На первых страницах все хорошо, но когда листаем страницы близкие к последним все очень плохо опять. Да и глупо как то, 100к страниц и сам отказываешься от удобного пагинатора.

    Господа, куда копать? Можно ли чтото вообще сделать?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.820
    Симпатии:
    736
    Адрес:
    Татарстан
    мне кажется что при 2 млн строк любой пагинатор не шибко удобен будет
    может логику пересмотреть - и выводить совместно с фильтрами каким-то?
    Либо поиск по каким то критериям реализовать... я с трудом представляю, что человек сидит и с помощью пагинации листает 100 страниц даже ... это контрпродуктивно
     
    EvgeniyTSI нравится это.
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    @EvgeniyTSI проблема известна и не связана с Laravel и конкретным методом. Любой LIMIT m,n в MySQL будет тормозить на больших m.
    simplePaginate немного быстрее только потому что он не считает count.

    Выход может быть в изменении логики так, чтобы делать
    ORDER BY x WHERE x > y LIMIT n то есть избавиться от начального смещения.
    --- Добавлено ---
    Могу предположить, что самый простой выход не пытаться пагинировать 100k, а только скажем первые 1к.
     
    EvgeniyTSI нравится это.
  4. EvgeniyTSI

    EvgeniyTSI Активный пользователь

    С нами с:
    24 фев 2020
    Сообщения:
    16
    Симпатии:
    2
    Адрес:
    Rostov-on-Don
    Спасибо за подсказки. Задача сделать пагинатор, буду решать, позади Москва).