簡體   English   中英

MySQL查詢非常慢

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

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