Я создаю веб приложение вокруг базы данных Zabbix (MySQL), я хотел бы оптимизировать и ускорить следующий запрос:
```
SELECT distinct(hosts.hostid), max(CONVERT(CONCAT(events.eventid, events.value, events.severity), UNSIGNED))
FROM hosts
INNER JOIN hosts_groups ON hosts.hostid = hosts_groups.hostid
INNER JOIN hstgrp ON hosts_groups.groupid = hstgrp.groupid
INNER JOIN items ON hosts.hostid = items.hostid
INNER JOIN functions ON items.itemid = functions.itemid
INNER JOIN events ON functions.triggerid = events.objectid
WHERE events.name = %s
AND hstgrp.groupid = %s
AND hosts.status != 3 # 3 - not templates
GROUP BY hosts.hostid;
```
Я делаю 7 таких запросов внутри одного запроса http GET к веб приложению на основе Flask. Общее время этих 7 запросов варьируется от 10 до 70 секунд, что я связываю с тем, что таблица events постоянно меняется. Таблица events содержит большое кол-во записей.
Результаты Explain:
Как можно ускорить данный запрос?
Сейчас я добавляю Redis для хранения результатов этих запросов в течение 5 минут, далее наверно добавлю Celery, чтобы убрать такие долгие по времени запросы из http сервера. Но это о ускорении приложения в целом.