Rails / mysql SUM不同记录 - 优化

时间:2010-04-04 17:56:15

标签: mysql ruby-on-rails ruby query-optimization ruby-on-rails-plugins

嘿。您将如何优化此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吗?)

1 个答案:

答案 0 :(得分:1)

您应该拥有此SQL代码中涉及的所有外键的索引,例如: clients_groups.client_id,clients.country_id, clients_groups.group_id

然而,主要是 当您具有该数量的条目时,使用诸如SUM()或COUNT()之类的SQL函数可能会导致性能下降 因此,我建议您保留成本的缓存,并在影响成本的每个事务中更新它。