簡體   English   中英

在MySQL中按子查詢優化分組

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

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