我有如下表结构:
CREATE TABLE IF NOT EXISTS `dnddata` (
`numbers` varchar(10) NOT NULL,
`opstype` char(1) NOT NULL,
PRIMARY KEY (`numbers`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (numbers)
PARTITIONS 20 */;
当我将数据插入此表需要很长时间。
花50分钟插入300万条记录。
我使用了load data
和insert into dnddata SELECT * from another_myisamtable
。
两种方法的时间差不多。
没有分区的同一张表不到2分钟。
我必须插入5000万条记录的数据。
请建议哪种方法可以插入这么多记录。
谢谢..
答案 0 :(得分:1)
分区表的有趣之处在于,当您尝试将INSERT
放入一个分区时,您必须锁定(或者至少“锁定访问锁定”)所有分区。所以 - 更多分区==更多锁。
您可以在Giuseppe Maxia's blog中了解更多相关信息。
虽然上述帖子讨论了单行的INSERT
,但同样的问题也适用于多行。
由于您使用的是MyISAM,因此会进行实际锁定。您可以选择使用相同格式的InnoDB表进行相同的操作。