提高主细节SQL代码的性能

提高主细节SQL代码的性能,sql,Sql,我有两张桌子 我需要一份报告,包括Payment1,Payment2列中的姓名和付款金额,不得重复 所以我写下: ( SELECT Pid1, SUM(Payment1) as sum1, COUNT(*) as number, _name FROM perform, Person WHERE perform.Pid1= Person.id GROUP BY _name, Pid1 ) UNION ( SELECT Pid2, SUM(Payment2) as sum2,

我有两张桌子

我需要一份报告,包括
Payment1
Payment2
列中的姓名和付款金额,不得重复

所以我写下:

(
  SELECT Pid1, SUM(Payment1) as sum1, COUNT(*) as number, _name
  FROM perform, Person
  WHERE perform.Pid1= Person.id
  GROUP BY _name, Pid1
)
UNION
(
  SELECT Pid2, SUM(Payment2) as sum2, COUNT(*) as number, _name 
  FROM perform, Person
  WHERE perform.Pid2= Person.id
  GROUP BY _name, Pid2
)
和输出:
这个代码可以工作,但是太慢了。如何提高性能?

通过将
联合
移动到子查询,可以减少加入
个人
的次数:

select  pers.id
,       perf_sum.sum_payment
,       perf_sum.count_payment
,       pers._name
from    (
        select  pid
        ,       count(*) as count_payment
        ,       sum(payment) as sum_payment
        from    (
                select  PID1 as pid
                ,       Payment1 as payment
                from    perform
                union all
                select  PID2
                ,       Payment2
                from    perform
                ) perf
        group by
                pid
        ) perf_sum
join    person pers
on      perf.pid = pers.id