0

嘿。你将如何优化这个SQLRails/mysql SUM不同记录 - 优化

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)可以有超过1000万条记录。如果性能更好,您可以将其拆分为更多的SQL。 我应该添加任何索引以使其更快(我拥有ID)吗?

+0

你能解释一下这个查询应该做什么吗?这非常奇怪,因为A)DISTINCT clients.id在这种情况下似乎并不意味着任何东西,事实上,选择clients.id的必要性并不明显,B)您正在按clients.id进行分组,这意味着您只会从第一个国家获得成本,但没有订单,因此您将基本上为每个客户端获得一个任意国家。 – gtd 2010-04-04 21:26:35

+0

内部SQL具有DISTINCT属性以消除所有clients.id重复。 SQL的作品,但我正在寻找优化建议。 – xpepermint 2010-04-05 12:26:14

回答

1

您应该对参与这个SQL代码,所有的外键指标如: clients_groups.client_id,clients.country_id,clients_groups.group_id

然而,主要 当你有多个条目,使用SQL函数(如SUM()或COUNT())可能会导致性能下降 因此,我建议您保留成本缓存并使用影响成本的每个事务对其进行更新。