优化MySQL查询

优化MySQL查询,mysql,optimization,Mysql,Optimization,我想运行一个查询,为活动生成收入报告。有两张桌子 成员和付款 members (id, campaign_code) payments (id, member_id, amount) 我想创建一个按campaign\u code分组的表,即使用此格式 campaign_code, member_count, total_revenue 我把所有的活动放在一个阵列中运行这个 SELECT sum( amount ) AS amt FROM (members INNER JOIN paymen

我想运行一个查询,为活动生成收入报告。有两张桌子 成员和付款

members (id, campaign_code)
payments (id, member_id, amount)
我想创建一个按
campaign\u code
分组的表,即使用此格式

campaign_code, member_count, total_revenue 
我把所有的活动放在一个阵列中运行这个

SELECT sum( amount ) AS amt
FROM (members
INNER JOIN payments 
    ON payments.member_id = members.id
)
WHERE campaign_code = 'XX'
这需要很多时间。不管怎样,要优化它还是在单个查询中执行它?

使用

where campaing_code in ('XX','YY','ZZ','AA','BB')
并且有一个关于营地代码的索引(id、会员id、金额) 我想创建一个按活动代码分组的表,即采用这种格式

campaign_code, member_count, total_revenue 
活动代码、会员人数、总收入 我把所有的活动放在一个阵列中运行这个

select
      m.Campaign_Code,
      count( distinct p.member_id) as Members,
      count(*) as PaymentEntries,
      sum( p.amount ) as TotalRevenue
   from
      members m
         join Payments p
            on m.id = p.member_id
   where
      m.campaign_code = 'XX'
如果需要所有活动,只需删除WHERE子句。您在评论中提到,这些表确实有索引,但我会确保members表有关于活动代码的索引,payments表有关于成员id的索引


此查询将提供已捐款的不同成员的计数、捐款总数(如果一个或多个成员多次捐款)以及所有捐款的总数。

正如您所说,您需要对所有活动代码进行汇总,请尝试此查询

SELECT m.campaign_code , count(p.member_id) AS member_count,
  SUM( amount ) AS total_revenue
FROM members m, payments p
WHERE p.member_id = m.id
GROUP BY campaign_code;

确保按函数读取mysql组

成员id和id是否有索引?是的,两者都有索引。将有大约7.5万名会员和8万排付款。不是很多,“…在(xx,yy,zz)中的活动代码”。执行循环以构建一个类似于这样的sql语句。谢谢Drapp,但这个解决方案为我提供了一个整体视图。事实上,我想要的是基于竞选代码的数据,我想出来了。