уменьшить время выполнения / php, sql

Игорь Исаков

Есть две таблицы (MySQL):
users с полями account, street, house (лиц счет, улица, дом)
payed с полями account, payed (лиц счет, оплаченная сумма).
Внутри одного адреса (улица, дом) много лиц счетов (account)

Для визуализации нужно сопоставить оплату и адреса. Сумма всех оплат всех лиц счетов по всем адресам (внутри каждого адреса суммируются).

Есть рабочий код, однако он выполняется более 30 секунд, из-за чего скрипт валится. Прописать бОльшее время выполнения не проблема, однако даже 30 секунд это очень дорого.
Собственно код (php 5.6, фетчинг настроен как ассоциативный):

    $users = Array();
    $payed = Array();

    $i = 0;
    $stmt = $pdo->query('SELECT account, street, house FROM users');
    while ($row = $stmt->fetch()) {
            $users[$i] = $row;
            $i++;
    }

    $stmt = $pdo->query('SELECT account, payed FROM payed');

    while ($row = $stmt->fetch()) {
            for ($j = 0; $j < count($users); $j++) {
                    if ($users[$j]['account'] == $row['account']) $payed['Ул. '.$users[$j]['street'].', д. '.$users[$j]['house']] += $row['payed'];
            }
    }

Вот эта вот запись: $payed['Ул. '.$users[$j]['street'].', д. '.$users[$j]['house']] формирует ключ массива в виде адреса.
У меня пока единственная мысль это готовить данные заранее (они нужны помесячно) и писать их в отдельную таблицу. Для визуализации использовать уже готовые данные. В таком случае дорогая операция будет вызываться раз в месяц.
Может еще идеи есть? В особенности без заранее подготовленных данных, а в части совершенствования алгоритма.

Игорь Исаков 7 месяцев назадСпасибо 0
0 чел.