簡體   English   中英

在JOIN中重寫慢的SQL(子)查詢

[英]Rewriting a slow SQL (sub) query in JOIN

因此,我有大量的慢速SQL查詢,並將其縮小為慢速子查詢,因此我想將其重寫為JOIN。 但是我被卡住了...(由於MAXGROUP BY

SELECT *
FROM local.advice AS aa
  LEFT JOIN webdb.account AS oa ON oa.shortname = aa.shortname 
WHERE aa.aa_id = ANY (SELECT MAX(dup.aa_id)
                      FROM local.advice AS dup
                      GROUP BY dup.shortname) 
  AND oa.cat LIKE '111'
ORDER BY aa.ram, aa.cpu DESC
LIMIT 0, 30

這是查詢的不同版本,其中子查詢使用連接子句進行轉換

select * from local.advice aa 
JOIN webdb.account oa ON oa.shortname = aa.shortname 
join(
 select max(aa_id) as aa_id,shortname from local.advice 
 group by shortname
)x on x.aa_id = aa.aa_id
where
oa.cat = '111'
order by aa.ram, aa.cpu DESC 
limit 0,30

另外,如果尚未添加索引,則可能需要應用索引

alter table local.advice add index shortname_idx(shortname);
alter table webdb.account add index cat_shortname_idx(cat,shortname);
alter table local.advice add index ram_idx(ram);
alter table local.advice add index cpu_idx(cpu);

我假設aa_id是主鍵,所以沒有添加索引

在應用索引之前,請確保對表進行備份

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM