![](/img/trans.png)
[英]How do I speed this mysql query up to sum a score in a large mysql table (2million rows)
[英]mysql distinct on 6 million rows takes 17 minutes to run? Can I speed this up?
我正在嘗試從600萬行表中獲取不同的ID。 查詢非常簡單,並且解釋似乎還可以。 Distict行被索引為uid-date-time分組索引的一部分。
查詢是
SELECT DISTINCT uid FROM events;
並在17分鍾15.54秒內返回334117行。
的解釋是
+----+-------------+-------------+-------+---------------+----------------+---- ----+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | keylen | ref | rows | Extra | +----+-------------+-------------+-------+---------------+----------------+--------+------+------+--------------------------+ | 1 | SIMPLE | events | range | NULL | dateuid_idx | 4 | NULL | 10 | Using index for group-by | +----+-------------+-------------+-------+---------------+----------------+---- ----+------+------+--------------------------+
如果將uid放在單獨的索引中,這樣做會更快嗎? 還是有另一種方法可以加快速度?
看來您按日期索引,然后按UID索引,這無濟於事。 首先通過UID進行索引或為UID單獨索引將大大提高性能。
另外,您可以考慮使用GROUP BY而不是DISTINCT 。
是的,將uid作為單獨的索引可以更快。 如果沒有索引,則需要全表掃描; 也就是說,它實際上遍歷每一行,並檢查是否已經選擇了特定的uid。
但是,以uid作為索引,它只需要遍歷索引樹,如果有很多重復的uid,這可能會快得多。
在uid上創建索引
單獨的uid索引將加快處理速度。 但是創建索引可能需要大約17分鍾的時間 (因為創建索引必須進行大致相同的“讀取”量)。
因此,創建這樣的索引都取決於預期的用法。 如果多次運行相關查詢(如果僅在當前的重復記錄搜尋“活動”期間),則可能是一項不錯的“投資”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.