У меня есть таблица «Клиенты» и вложенная таблица «Заказы».
Для определенного просмотра мне нужно отобразить заказ last для каждого клиента.
Поскольку вы не можете использовать LIMIT в объединении, я сначала использовал комплексное решение с LEFT JOIN, GROUP_CONCAT и SUBSTRING_INDEX, чтобы получить последний заказ, но это довольно медленно, поскольку существует миллионы записей.
Затем я подумал о том, чтобы просто сохранить последний OrderID в таблице Clients, которая обновляется триггером при каждом изменении таблицы Orders. Затем я просто присоединяюсь к заказам в этом поле LastOrderID.
Может ли индекс в поле LastOrderID быть полезным в этой ситуации? Или же он не будет использоваться, поскольку исходной таблицей всегда являются клиенты, поэтому в этом поле не выполняется сортировка, поиск и т. Д.?
Причина, по которой я спрашиваю, состоит в том, что на самом деле все немного сложнее, мне может понадобиться около 20 таких полей.
Обновление:
Мой запрос сейчас:
SELECT *
FROM Clients AS c
LEFT JOIN Orders AS o ON o.OrderID=c.LastOrderID
Повысит ли индекс LastOrderID в клиентах скорость или это не обязательно?