MySQL:如何通过查询非常大的表(74m行)来加速插入和分组

时间:2014-03-24 05:12:07

标签: mysql performance insert

我正在尝试运行以下查询,这需要花费数小时和数小时。我们有一个专用的查询服务器(不在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

干杯, 卢卡斯

1 个答案:

答案 0 :(得分:0)

此查询将读取整个7400万行。它还将在新表中重新创建大部分表,具体取决于您拥有的组数。

我们没有足够的关于您的服务器或数据集的信息,但做了很多但是做了有根据的猜测。

你想查看你的innodb配置,特别是关于你分配了多少内存(应该几乎是服务器可用RAM的全部,越多越好),而不是基本开销所需的内容,如上所述在https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html

您的服务器io子系统可能是瓶颈。如果IO速度很慢,服务器可能会陷入困境,试图跟上此查询所需的读/写。设置高性能数据库服务器要比在“专用”机器上安装mysql服务器复杂得多。