У меня есть запрос, который выполняется довольно медленно из-за таблицы, содержащей 2,9 млн строк и соединений с другими таблицами. Мне удалось наполовину сократить время выполнения, но оно все еще недостаточно быстро.
У кого-нибудь есть идеи о том, что еще я могу сделать? Все столбцы сумма, entityId, merchant.name, channel.uuid и channel.sender проиндексированы.
Это оригинальный запрос, который занимает 11 секунд ...
SELECT
SUM(t.amount) AS amount,
m.name
FROM
transactionsV2 t
JOIN channels c ON t.entityId = c.uuid
JOIN merchants m ON c.sender = m.uuid
WHERE
t.paymentType = "DB"
AND t.status = 1
AND t.processing_time >= "2019-01-19 00:00:00"
AND t.processing_time <= "2019-01-20 23:59:59"
GROUP BY m.uuid
ORDER BY m.name
Это переработанный запрос, который занимает 4,5 секунды ...
SELECT
SUM(t1.amount) AS amount,
m.name
FROM
(
SELECT t.amount, t.entityId
FROM transactionsV2 t
WHERE
t.paymentType = "DB"
AND t.status = 1
AND t.processing_time >= "2019-01-19 00:00:00"
AND t.processing_time <= "2019-01-20 23:59:59"
) t1
JOIN channels c ON t1.entityId = c.uuid
JOIN merchants m ON c.sender = m.uuid
GROUP BY m.name
Ниже приведена структура таблицы для всех 3 таблиц.