嘿。您将如何优化此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吗?)
答案 0 :(得分:1)
您应该拥有此SQL代码中涉及的所有外键的索引,例如: clients_groups.client_id,clients.country_id, clients_groups.group_id
然而,主要是 当您具有该数量的条目时,使用诸如SUM()或COUNT()之类的SQL函数可能会导致性能下降 因此,我建议您保留成本的缓存,并在影响成本的每个事务中更新它。