【发布时间】:2016-04-11 17:36:06
【问题描述】:
我有一个包含 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 会很慢,因为它必须进行多次评估。特别是在字符串类型列上。你不能用其他方式继续吗?你的表上定义了索引吗?
-
您需要索引(性别、州)。请发布表架构和解释结果。
-
是的,索引已定义。
-
好的,哇。当我将“in”替换为“从 big_data 中选择 state、gender、count(*) where gender='Sugar Daddy' group by state,gender”时,它将时间从 65 秒减少到 27 秒
-
SHOW CREATE TABLE big_data的结果会更好。
标签: mysql temp-tables bigdata