簡體   English   中英

MySQL“不同”加入超慢

[英]MySQL "Distinct" join super slow

我有以下查詢,它給了我正確的結果。 但它超級慢。 讓它變慢的原因是

AND a.id IN (SELECT id FROM st_address GROUP BY element_id)

部分。 查詢應該顯示我們從哪些國家獲得了多少訂單。
一個人可以有多個地址,但在本例中,我們只想要一個。
否則它會多次計算訂單。 也許有更好的方法來實現這一目標? 對人或事的獨特加入?

SELECT cou.title_en, COUNT(co.id), SUM(co.price) AS amount
FROM customer_order co
JOIN st_person p ON (co.person_id = p.id)
JOIN st_address a ON (co.person_id = a.element_id AND a.element_type_id = 1)
JOIN st_country cou ON (a.country_id = cou.id) 
WHERE order_status_id != 7 AND a.id IN (SELECT id FROM st_address GROUP BY element_id)
GROUP BY cou.id 

您是否嘗試過用 EXISTS 替換 IN?

AND EXISTS (SELECT 1 FROM st_address b WHERE a.id = b.id)

EXISTS 部分應在找到符合條件的第一行后立即停止子查詢。 我已經閱讀了關於這是否真的發生的相互矛盾的評論,所以你可以在那里設置一個限制 1 看看你是否有任何收獲。

我找到了一個更快的解決方案。 訣竅是與子查詢的連接:

JOIN (SELECT element_id, country_id, id FROM st_address WHERE element_type_id = 1 GROUP BY 

這是完整的查詢:

SELECT cou.title_en, COUNT(o.id), SUM(o.price) AS amount 
FROM customer_order o
JOIN (SELECT element_id, country_id, id FROM st_address WHERE element_type_id = 1 GROUP BY element_id) AS a ON (o.person_id = a.element_id)
JOIN st_country cou ON (a.country_id = cou.id) 
WHERE o.order_status_id != 7 
GROUP BY cou.id 

暫無
暫無

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

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