хитрость, чтобы получить сумму строк MySQL за пределами MySQL - PullRequest
2 голосов
/ 26 августа 2011

поэтому у меня следующий запрос:

SELECT DISTINCT d.iID1 as 'id',
                      SUM(d.sum + d.count*r.lp)/sum(d.count) AS avgrat
                      FROM abcd i, abce r, abcf d
                      WHERE r.aID = 1 AND
                      d.iID1 <> r.rID  AND d.iID2 = r.rID GROUP BY d.iID1
                      ORDER BY avgrat LIMIT 50;

проблема в том, что .... с миллионами записей в таблице, SUM() и GROUP BY заморозят запрос ....Есть ли способ сделать именно это, что будет выполняться мгновенно с использованием хаков MySQL и / или PHP (возможно, суммирование с PHP .... но как бы я это сделал ...)

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Чтобы ответить на прямой вопрос: нет, невозможно что-либо сделать мгновенно .

Если у вас есть контроль над обновлениями таблиц или приложением, которое добавляет соответствующие записи, то вы можете добавить логику, которая обновляет другую таблицу с суммой, количеством и идентификатором при каждом обновлении. Затем пересмотренный запрос нацеливается на «таблицу сумм» и тривиально вычисляет средние значения.

0 голосов
/ 26 августа 2011

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

Вам нужно будет решить, будут ли издержки триггеров меньше, чемчто из запроса.Вот некоторые важные факторы:

Частота обновления исходной таблицы

Частота выполнения агрегированного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...