[英]MySQL query is very slow
我有一個MySql表,其行數在1500萬到2000萬之間。 我過去曾使用數據分區來提高性能100%以上。 但是,現在,當我運行以下查詢時,查詢執行時間超過60秒。
select state, gender, count(*) from big_data where gender in ('Sugar Daddy','Sugar Baby') group by state, gender
結果
[SQL]select state, gender, count(*) from big_data where gender in ('Sugar Daddy','Sugar Baby') group by state, gender
Affected rows: 0
Time: 59.390s
在我的解釋中我發現:99%的時間花在復制到臨時表上! 如何提高此查詢的性能?
架構和解釋:
由於IN
實際上是一個釋義的OR
列表,您可以嘗試使用UNION來利用gender
指數; 像這樣:
select state, gender, count(*)
from big_data
where gender = 'Sugar Daddy'
group by state
UNION
select state, gender, count(*)
from big_data
where gender = 'Sugar Baby'
group by state
order by state, gender
您至少需要有一個gender
列的索引,因此它可以用於WHERE子句。 但是,如果有太多行匹配WHERE條件, GROUP BY
的排序可能也很昂貴。 因此,(性別,州)的索引會更好,您的查詢只會運行該索引。 由於state
已經是PK的一部分,該索引甚至不會占用更多空間,因為PK始終是InnoDB中任何索引的一部分。
Additonaly我建議您創建一個genders
表(gender_id,gender_name),並在引用genders.gender_id
的大表上使用外鍵。 這就是你讓你的桌子和索引更小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.