как мне индексировать таблицы, соответствующие этому запросу? - PullRequest
0 голосов
/ 29 августа 2011

Итак, у меня есть следующий запрос:

SELECT d.iID1 as 'id',
                      SUM(d.sum + d.count*r.lp)/sum(d.count) AS avgrat
                      FROM 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;

Таблица abcf в настоящее время содержит более 130217 строк, а таблица abce в настоящее время содержит 5284 строки .... выполнение этого запроса занимает около 7 секунд ....

как мне добавить индексы в таблицы, включенные в этот запрос, чтобы ускорить его?Какой тип индексов я должен вставлять и в какие столбцы?

Объясните вывод:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
 1, 'SIMPLE', 'd', 'ALL', '', '', '', '', 130217, 'Using temporary; Using filesort'
 1, 'SIMPLE', 'r', 'ALL', '', '', '', '', 5611, 'Using where; Using join buffer'

1 Ответ

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

У вас есть куча агрегатных функций и пункт order by.

1) Я бы хотя бы начал с индекса для d.iID2, r.rID из d.iID2 = r.rID 2) индекс r.aID тоже не помешает ...

Кроме этого, агрегаты, упорядочение и <> в значительной степени контролируют остальное. Проверьте медленный журнал запросов, чтобы увидеть, если это тоже есть. Если этот запрос используется часто, подумайте о том, чтобы включить кэширование и / или сделать его хранимой процедурой.

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