[英]SQL Subquery optimization multiple aggregate operations
我正在嘗試找到該項目的不同表和組的平均值和總和。 我還想將返回的表壓縮為一行。 所以對於我的子查詢,我得到這個結果
到目前為止,這是我的sql代碼。 它可以工作,但是性能非常慢,我不確定為什么或如何對其進行優化。
select sum(sub.count) as count, avg(sub.opened) as opened,
avg(sub.clicked) as clicked, avg(sub.started_watching) as started_watching,
sum(sub.views) as views
from (
select p.id, count(e.id) as count,
avg(e.opened) as opened, avg(e.read_email) as clicked,
avg(e.started_video) as started_watching, sum(e.views) as views
from projects p
inner join guests g
on g.project_id = p.id
inner join videos v
on v.guest_id = g.id
inner join emails e
on e.video_id=v.id
group by p.id) sub;
尋找您的查詢的主要問題與子查詢結果的創建有關
因此,改進此查詢非常重要,例如,在每個表的聯接所涉及的列上添加適當的索引,並最終為select中使用的列(在聯接所使用的列之后)添加復合索引
Select sum(sub.count) as count
, avg(sub.opened) as opened
, avg(sub.clicked) as clicked
, avg(sub.started_watching) as started_watching
, sum(sub.views) as views
from (
select p.id
, count(e.id) as count
, avg(e.opened) as opened
, avg(e.read_email) as clicked
, avg(e.started_video) as started_watching
, sum(e.views) as views
from projects p
inner join guests g on g.project_id = p.id
inner join videos v on v.guest_id = g.id
inner join emails e on e.video_id=v.id
group by p.id
) sub;
因此,請確保您有正確的索引
guests (project_id)
videos (guest_id)
emails (video_id, id, opened, read_email,started_video, views)
and obvious on projects (id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.