Есть большая MySQL база с множеством таблиц и в каждой таблице до 10 млн. записей ($bd).
Некоторые SQL($sql) запросы отрабатывается по несколько минут.
Получаем некий результат: $ result = mysqli_query ($bd, $sql).
В отдельном файле организуется вывод данных ($ result) в таблицу htmlв цикле:
while ($myrow= mysqli_fetch_assoc ($result)) {…}
Получается тысячи строк.
Задача: организовать вывод величины $ result с разбиением постранично, типа: 1 2 3 4 5 6 7 8 ... >
ОДНАКО: НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ В ПОСТРАНИЧНОМ ВЫВОДЕ SQLЗАПРОСЫ К БАЗЕ ДАННЫХ, ТАК КАК КАЖДЫЙ ЗАПРОС И ЛЮБОЙ LIMITБУДЕТУТ ОТНИМАТЬ БОЛЬШОЕ ВРЕМЯ.
Иными словами: запрос SQL($sql) должен случаться 1 раз, а результат этого запроса ($ result) должен разбиваться и выводиться в многостраничном формате.
1. bluser - 23 Апреля, 2017 - 09:16:15 - перейти к сообщению
2. Мелкий - 23 Апреля, 2017 - 10:14:40 - перейти к сообщению
http://use-the-index-luke[dot]com/no-offset
Т.е. передавайте последний встреченный элемент данных с предыдущей страницы и читайте limit записей от него при той же сортировке.
Это мелкая база.
В этом случае вам нужно вычитать весь результат запроса и сохранить его куда-то ещё в другое место. В подарок куча проблем с обновлением этого кеша, живущего отдельно от СУБД. Но, так тоже можно делать, да.
Т.е. передавайте последний встреченный элемент данных с предыдущей страницы и читайте limit записей от него при той же сортировке.
bluser пишет:
Есть большая MySQL база
bluser пишет:
таблице до 10 млн. записей ($bd).
Это мелкая база.
bluser пишет:
запрос SQL($sql) должен случаться 1 раз, а результат этого запроса ($ result) должен разбиваться
В этом случае вам нужно вычитать весь результат запроса и сохранить его куда-то ещё в другое место. В подарок куча проблем с обновлением этого кеша, живущего отдельно от СУБД. Но, так тоже можно делать, да.