我有一个包含 1500 万到 2000 万行的 MySql 表。过去,我曾使用数据分区将性能提高 100% 以上。但是,现在,当我运行以下查询时,执行 queru 需要 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
关于MySQL 查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36555466/