У меня есть следующий SQL, но я хочу улучшить производительность (вариант 2, приведенный ниже, в настоящее время занимает около 24 секунд).
ОБЪЯСНИТЬ MySQL - используя приведенный ниже пример ответа ![enter image description here](https://i.stack.imgur.com/vK0gf.png)
Вариант 1 - базовый выбор (очень медленный)
select f.name, f.flowid, m.traceid, m.traceday, m.logtimestamp
from flow f, messageinfo m
where traceid = (select max(traceid) from messageinfo where flowid = f.flowid)
ОБНОВЛЕНИЕ
Вариант 2 - с внутренним соединением (быстрее, но все еще слишком медленно)
select m.traceid, f.name, f.flowid, m.traceday, m.logtimestamp
from flow f
inner join messageinfo m
on m.flowid = f.flowid
where traceid = (select max(traceid) from messageinfo where flowid =
f.flowid)
order by f.name
Мне нужно перебрать записи потока (их около 900) и для каждого потока выбрать связанный поток в messageinfoтаблица, которая является самой последней, то есть имеет самый высокий traceid для этого конкретного потока.Оба приведенных выше примера SQL работают, но хотелось бы посмотреть, смогу ли я повысить производительность для варианта 2, если это возможно.Окончательный результат должен быть наилучшим и должен возвращать трассировку только там, где может быть найдена соответствующая запись потока (например, внутреннее соединение).Кто-нибудь может предложить более эффективный способ?Имейте в виду, что я хотел бы вернуть данные из обеих таблиц в конечном результате (как показано в примере выше).
Я также должен подчеркнуть, что у меня нет свободы изменять DB с помощью новой /обновленные индексы.Так что в основном ищем улучшения SQL без модификаций БД.
Тем не менее, все же полезно отметить какие-либо улучшения индекса для будущей работы.