0

我有如下表结构:

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 万条记录的数据。

请建议插入这么多记录的最佳方法。

谢谢..

4

1 回答 1

2

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

您可以在Giuseppe Maxia 的博客中了解更多信息。

尽管该帖子讨论了INSERT单行,但同样的问题也适用于多行。

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

于 2012-07-18T08:05:55.673 回答