插入分区表需要很长时间

时间:2012-07-18 07:26:39

标签: mysql mysqli bulkinsert partitioning load-data-infile

我有如下表结构:

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 datainsert into dnddata SELECT * from another_myisamtable

两种方法的时间差不多。

没有分区的同一张表不到2分钟。

我必须插入5000万条记录的数据。

请建议哪种方法可以插入这么多记录。

谢谢..

1 个答案:

答案 0 :(得分:1)

分区表的有趣之处在于,当您尝试将INSERT放入一个分区时,您必须锁定(或者至少“锁定访问锁定”)所有分区。所以 - 更多分区==更多锁。

您可以在Giuseppe Maxia's blog中了解更多相关信息。

虽然上述帖子讨论了单行的INSERT,但同样的问题也适用于多行。

由于您使用的是MyISAM,因此会进行实际锁定。您可以选择使用相同格式的InnoDB表进行相同的操作。