Эй. Как бы вы оптимизировали этот SQL
SELECT SUM(tmp.cost) FROM (
SELECT DISTINCT clients.id as client, countries.credits_cost AS cost
FROM countries
INNER JOIN clients ON clients.country_id = countries.id
INNER JOIN clients_groups ON clients_groups.client_id=clients.id
WHERE clients_groups.group_id IN (1,2,3,4,5,6,7,8,9)
GROUP BY clients.id
) AS tmp;
Я использую этот пример как часть моего проекта Ruby on Rails. Обратите внимание, что мой вложенный SQL (tmp) может иметь более 10 миллионных записей. Вы можете разделить это на большее количество SQL, если производительность будет лучше. Должен ли я добавлять какие-либо индексы, чтобы сделать это быстрее (у меня есть ID)?
У вас должны быть индексы для всех внешних ключей, участвующих в этом коде SQL, например: clients_groups.client_id, clients.country_id, clients_groups.group_id
Однако, в основном Когда у вас есть такое количество записей, использование SQL-функций, таких как SUM() или COUNT(), может быть убийством по производительности Поэтому я предлагаю вам хранить кеш стоимости и обновлять ее при каждой транзакции, влияющей на стоимость.