У меня есть таблица MySQL, в которой хранятся записи журнала резервного копирования с большого количества устройств (в настоящее время около 750). Мне нужно использовать запрос, чтобы получить подробную информацию о последней записи для каждого устройства. В настоящее время я использую вложенный запрос для достижения этого, который изначально работал нормально. Однако в таблице теперь есть тысячи строк, и запрос занимает много времени. Я хотел бы улучшить производительность запроса и хотел бы знать, возможно ли это благодаря использованию объединений вместо вложенного оператора select или с помощью некоторых других улучшений, которые я мог бы сделать.Как улучшить производительность SQL-запросов в MySQL
Текущий запрос:
SELECT id, pcname, pcuser, checkTime as lastCheckTime,
TIMESTAMPDIFF(SECOND,checkTime,now()) as lastCheckAge,
lastBackup, diff, threshold, backupStatus,
TIMESTAMPDIFF(SECOND,lastBackup,now()) as ageNow
FROM checkresult
WHERE (checkTime, pcname) IN
(
SELECT max(checkTime), pcname
FROM checkresult
GROUP BY pcname
)
ORDER BY id desc;
id
является первичным ключом для таблицы, и является единственным индексированный столбец.
В таблице используется InnoDB
Благодаря @GordonLinoff - это работало отлично и уменьшило время выполнения десятикратно (возможно, больше). – Jet86