производительность — PHP: медленный цикл foreach

Следующий скрипт очень медленный — у таблицы «users» сейчас около 13 000 строк. Любые идеи, как изменить его, чтобы ускорить его? Спасибо!

<?php

$first = 0;
$second = 0;
$third = 0;
$fourth = 0;

foreach ($_SESSION['subordinates'] as $key => $subordinateId) {
$q1 = mysql_num_rows(mysql_query ("SELECT id FROM users WHERE id=$subordinateId and dogs = 0 and cats = 0"));
$first = $first  + $q1;

$q2 = mysql_num_rows(mysql_query ("SELECT id FROM users WHERE id=$subordinateId and (cats=1 or cats=1)"));
$second = $second + $q2;

$q3 = mysql_num_rows(mysql_query ("SELECT id FROM users WHERE id=$subordinateId and dogs = 0 and cats = 0 and myDate > SUBDATE(NOW(), INTERVAL 1 MONTH)"));
$third = $thirth + $q3;

$q4 = mysql_num_rows(mysql_query ("SELECT id FROM users WHERE id=$subordinateId and (dogs = 1 or cats = 1) and myDate > SUBDATE(NOW(), INTERVAL 1 MONTH)"));
$fourth = $fourth + $q4;
}

?>

0

Решение

Возможно не медленный цикл PHP, а MySQL Queries. Вы можете попробовать добавить некоторые индексы в вашу таблицу, например так.

CREATE INDEX user_index_on_dogs ON users (dogs);
CREATE INDEX user_index_on_cats ON users (cats);
CREATE INDEX user_index_on_dogs_and_cats ON users (dogs, cats);
CREATE INDEX user_index_on_my_date ON users (myDate);

Также вы можете посмотреть на Официальная справка MySQL о CREATE INDEX, или же как mysql использует эти индексы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector