[英]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.