我有一个带有约50个索引的分区表,我将插入约2000万个 每天记录。
每次我打电话给insert into tableA values (..),(..)...
插入2000条记录时,大约需要五个小时。
我无法从文件加载数据。因此,我创建了一个与talbeB
相同的表tableA
,但是tableB
没有索引。首先,我将数据插入tableB
,然后调用insert into tableA select * from tableB where mydate = 20181119
。第一阶段大约需要40分钟,第二阶段大约需要一个小时。
我想知道是否有更快的方法。非常感谢!
答案 0 :(得分:1)
UNIQUE
索引比非唯一索引的开销更大。你有几个。INSERT
语句中一次批处理100行,而不是2000行。innodb_buffer_pool_size
的值是什么?PARTITION
按日期?提供实际的分区定义。有好的方法可以做到,而无用的方法。SHOW VARIABLES
和SHOW GLOBAL STATUS
;如果您有太多的话,可能会有 的解决方法。请提供SHOW CREATE TABLE
供进一步讨论。您可以混淆列名,但要与索引一致并具有实际的数据类型。
DW:http://mysql.rjweb.org/doc.php/datawarehouse
摘要表:http://mysql.rjweb.org/doc.php/summarytables
高速摄入(针对“连续”摄入):http://mysql.rjweb.org/doc.php/staging_table
分区:http://mysql.rjweb.org/doc.php/partitionmaint