Все время тратится на 1206 последовательных проверок host_identifiers
.
Попробуйте заменить подзапросы на объединения:
SELECT rh.id, rh.host,
iso_time(rh.start_time), iso_time(rh.end_time),
rh.current_port, rh.max_port, rh.report,
r.uuid,
h.uuid
FROM report_hosts AS rh
LEFT JOIN reports AS r
ON rh.report = r.id
LEFT JOIN host_identifiers AS hi
ON hi.source_id = r.uuid
AND hi.value = rh.host
AND hi.source_type = 'Report Host'
AND hi.name = 'ip'
LEFT JOIN hosts AS h
ON h.id = hi.host
WHERE rh.report = 702;
Это не совсем то же самое, потому что это делаетне учитывайте LIMIT 1
, который не имеет смысла без ORDER BY
, но он должен быть близок к истине.
Правильные индексы сделают это быстрым (если они еще не существуют):
- один на
reports(id)
- один на
host_identifiers(source_id, value)
- один на
hosts(id)
Ваш запрос трудно прочитать, потому чтоВы не квалифицируете столбцы с именем таблицы.