2017-08-24 58 views
-1

我有一個如下所示的MySQL表t_table,其中有數百萬條記錄。按複合鍵分組,然後通過MySQL選擇一個不同的列

id  c_key1    c_key2  ... 
1   123     abc 
2   123     bcd 
3   234     acd 
4   234     ads 

複合鍵:composite_key(c_key1,c_key2)。現在

我願做這樣的事情:

SELECT 
    DISTINCT c_key1 
FROM 
    t_table 
GROUP BY 
    c_key1, c_key2 
HAVING 
    COUNT(1) >= 2; 

但解釋計劃已經「使用臨時;使用文件排序」,其速度越慢。有什麼方法可以優化嗎?

+0

你想在這裏找到什麼?在擔心優化之前,您應該確保您有正確的查詢。 –

+0

@TimBiegeleisen是的。上面的SQL只是我的第一個想法,但它有性能問題。所以我試圖找出更好的查詢。最後我得到了一個。 –

+0

你沒有回答我的問題:-( –

回答

0
SELECT DISTINCT c_key1 
    FROM t_table t1 
INNER JOIN 
(
    SELECT 
    MIN(t3.id) as id 
    FROM 
    t_table t3 
    GROUP BY t3.c_key1, t3.c_key2 
    HAVING COUNT(1) >= 2 
) t2 
    ON t2.id = t1.id; 

我想我有一個更好的(也許不是最好的)。解釋計劃顯示t1使用主鍵和t3組合索引。至於派生表,它至少使用臨時的,沒有文件。上述SQL的耗用時間比有問題的要短几倍。

讓我試着做更多的優化:)

相關問題