我正在尝试运行以下查询,这需要花费数小时和数小时。我们有一个专用的查询服务器(不在localhost上运行)。
这是一个大约有7400万行的InnoDB表。我已将索引中涉及的两列(TRAN_URN,UCI)编入索引,以期加快查询速度。
insert into data.urn_uci_lookup (TRAN_URN, UCI, `Count`)
select TRAN_URN,UCI, count(*) as `Count`
from data.diablo18
group by TRAN_URN, UCI
出于某种原因这是否效率低下?我怎样才能改进它?
编辑:这是EXPLAIN计划
id select_type表类型possible_keys键key_len ref rows Extra
1 SIMPLE diablo18 ALL \ N \ N \ N \ N 74631102使用临时;使用filesort
干杯, 卢卡斯
答案 0 :(得分:0)
此查询将读取整个7400万行。它还将在新表中重新创建大部分表,具体取决于您拥有的组数。
我们没有足够的关于您的服务器或数据集的信息,但做了很多但是做了有根据的猜测。
你想查看你的innodb配置,特别是关于你分配了多少内存(应该几乎是服务器可用RAM的全部,越多越好),而不是基本开销所需的内容,如上所述在https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html。
您的服务器io子系统可能是瓶颈。如果IO速度很慢,服务器可能会陷入困境,试图跟上此查询所需的读/写。设置高性能数据库服务器要比在“专用”机器上安装mysql服务器复杂得多。