мультизапрос или...

Статус
В этой теме нельзя размещать новые ответы.

SimonSmith

Мастер
Регистрация
25 Сен 2008
Сообщения
148
Реакции
34
Уважаемые,
стоит задача вывести разом 4000 рядов из базы MySQL. На ум пришли две мысли:
1. Вывести все 4000 рядов одним селектом без лимита
2. php рекурсия с лимитом в 500 рядов с одного селекта (8 селектов)

Вопрос: в каком случае обработка и вывод данных окажется быстрее?
п.с. число выводимых рядом постепенно растет.
 
Вам нужна быстрая обработка или низкая нагрузка на сервер? Определитесь - это не совместимо друг с другом.

Вывод разом всей таблицы - быстрая, но ресурсоёмкая операция (по CPU и HDD для MySQL и RAM для PHP).
Вывод с лимитом медленнее, но снижает нагрузку с MySQL и переводит её на PHP. При этом снимается нагрузка с HDD, переводится на CPU и RAM. В единицу времени нагрузка меньше, но суммарная - больше.

Но вывод 4000 позиций не нужная операция. Выводите по 200-300 на страницу или через AXAJ-подгрузку по 100 за раз. Это снизит нагрузку за единицу времени в разы, распределяя её по времени.

Вообще, есть 2 варианта всегда:
1) Разово загрузить сервер большой нагрузкой и получить ответ быстро.
2) Распределить нагрузку по времени, получить ответ с задержкой по времени, но без риска перегрузить сервер

К примеру, если у Вас VDS с 100 МГц (условно) и за каждые дополнительные 10 МГц Вам надо платить - выгоднее распределять нагрузку. Если у Вас выделенный сервер, который занимается только этой операцией - есть смысл получать результат мгновенно, но с 100% загрузкой CPU/HDD/RAM.

P.s. 4000 записи для MySQL копейки. У меня был опыт работы с большими таблицами, так 50 Мб таблицы полностью скачать и закачать обратно - 18 секунд. Операция с базой (селект) 50 000 записей - порядка 2 секунд.

P.p.s. можно поставить эксперимент. Написать PHP-скрипт, который в цикле выполняет некую операцию, а через 30 секунд автоматом убивается. И Вы увидите, что за 30 секунд мускул успеет сделать больше 100 тысяч записей. И это в 1 поток с побочными нагрузками. В несколько потоков добивался 50 тысяч запросов в секунду, но это после дикой оптимизации сервера.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху