Top.Mail.Ru
Ответы
Аватар пользователя
8лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Многостраничный вывод на PHP, используя запрос к MySQL лишь один раз.

Есть большая 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) должен разбиваться и выводиться в многостраничном формате.

По дате
По рейтингу
Аватар пользователя
Новичок
8лет

Всего-то 10 миллионов и несколько минут? Это решается:
1. Созданием наборов индексов, оптимизированных для запросов.
2. Разбиением одного "многоэтажного" запроса на несколько более простых.
3. Денормализацией данных (пятая нормальная форма хороша в теории, но скорости запросам не добавляет).
4. Добавлением в БД вспомогательных полей и таблиц, упрощающих запросы.

Аватар пользователя
Профи
8лет

А что мешает выгружать раз в сутки (или сколько тебе надо, настроив автоматом на сервере через CON) это всё в файл? А потом уже просто работать с этим файлом (хоть даже и сформированным html)?