Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по оптимизации нагрузки PHP скрипта, как сделать грамотнее...? 
:(
    Опции темы
sandland
Дата 8.12.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 28.4.2007

Репутация: нет
Всего: 1



Добрый день.
Имеется скрипт . повешенный на Cron, который проходит по довольно объемной базе данных ежедневно и обновляет некоторую информацию.
Если упростить модель, то структура БД: 3 таблицы, и получается 3 вложенных цикла

Код

$q1=mysql_query("SELECT ...");
while($r1=mysql_fetch_array($q1))
{
    $q2=mysql_query("SELECT ...");
    while($r2=mysql_fetch_array($q2))
    {
        $q3=mysql_query("SELECT ...");
        while($r3=mysql_fetch_array($q3))
        {
        // ....
        }
    }
}

Сама внутренняя таблица состоит из наименьшего числа записей,  это просто таблица пользователей системы.
И внутренний запрос  просто по нужным критериям выбирает нужного пользователя...

Я решил попробовать сделать перед этими вложенными циклами просто одни Запрос : Select * from `users` WHERE 1
и распихать все значения по массивам, и  использовать эту структуру вместо постоянно делающегося запроса за каждым юзером.

Вопрос такой: какое решение наиболее оптимально использовать?

PM MAIL WWW ICQ Jabber   Вверх
Ипатьев
Дата 8.12.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



оптимальнее всего делать одним запросом
PM MAIL   Вверх
SamDark
Дата 8.12.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



sandland
1. Проверяем флаг, говорящий, что запрос выполняется. Нужно, чтобы не запустить одновременно несколько одинаковых кронов.

2. Формируем запрос вида:
Код

SELECT1 
  JOIN
  JOIN
LIMIT X, X+C


Где X — запоминаемая после каждой отработки переменная, C — количество обрабатываемых за один раз строк.

3. Обрабатываем, запоминаем и наращиваем X: X=X+100;
4. Повторяем 1. пока запрос не вернёт пустой результат.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
Pitlord
Дата 11.12.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(SamDark @  8.12.2009,  18:43 Найти цитируемый пост)
LIMIT X, X+C

LIMIT X, C
PM MAIL   Вверх
nerezus
Дата 13.12.2009, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Опс, пардон, модераторы, перенесите в PHP и базы данных )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.