提高主细节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