MySQL - индекс для ускорения запросов с агрегатными функциями - PullRequest
1 голос
/ 23 сентября 2011

Как я понимаю, индекс для типичной таблицы базы данных обеспечит более эффективный поиск строк.Существует ли подобная конструкция для повышения эффективности запросов с агрегатными функциями?

В качестве примера, скажем, у меня есть таблица, как показано ниже, с большим количеством строк

Employees
employeeId | office | salary

SELECT office, MAX(salary)
FROM Employees
GROUP BY office

Я хочу эффективно получить MAX() зарплату для сотрудников из каждого офиса.В этом случае я не возражаю против дополнительных затрат на вставку / обновление, потому что я буду делать этот запрос довольно часто, а не писать в таблицу очень часто.

Мой движок - MyISAM на MySQL

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Используйте EXPLAIN, чтобы увидеть план выполнения запроса.Затем добавьте индекс и проверьте, улучшается ли план выполнения запроса.

Вы также можете использовать профилирование:

mysql> SET profiling=ON;
mysql> SELECT…
mysql> SET profiling=OFF;
mysql> SHOW PROFILES;
mysql> SHOW PROFILE FOR QUERY 1;

Секционирование также может повысить производительность вашего запроса.

1 голос
/ 23 сентября 2011

Составной индекс office + salary - это лучшее, что вы можете сделать (если вы не хотите просто сохранять предварительно рассчитанный максимум в другой таблице).

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