[英]Optimize group by sub query in Mysql
這是一個非常簡單的查詢。
如果我分別運行查詢,並沒有那么慢,但是當我組合它們時,它就非常慢。
我不確定如何優化它。 我基本上只想顯示多次退款。 因此,在faultid
存在多次的情況下。
SELECT
r.*
FROM
faultrefunds_v2 r
WHERE
r.id IN (SELECT r1.id
FROM faultrefunds_v2 r1
GROUP BY faultid
HAVING count(r1.faultid) > 1);
說明的結果已作為圖像附加
IN
子句的使用方式非常慢,請改用JOIN
:
SELECT r.* FROM (
SELECT r1.id AS id
FROM faultrefunds_v2 r1
GROUP BY faultid
HAVING count(r1.faultid) > 1
) AS ids
LEFT JOIN faultrefunds_v2 AS r
ON( ids.id = r.id )
我認為您的查詢無法回答問題。 據我了解,您應該首先獲取所有具有多個相關ID(表中的行)的Faultid。 然后獲取所有這些行(不僅是faultId)。
嘗試這個:
select * from faultrefunds_v2
where faultId in (
select faultId from faultrefunds_v2
group by faultId
having count(*) > 1
)
我猜想,這比起重新定義而不是優化是合格的,但是無論如何,這就是我會嘗試的方法:
SELECT
r.*
FROM faultrefunds_v2 r
WHERE EXISTS (
SELECT *
FROM faultrefunds_v2 r1
WHERE r1.faultid = r.faultid
AND r1.id <> r.id
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.