【问题标题】:insert into partitioned table taking very long time插入分区表需要很长时间
【发布时间】:2012-07-17 04:31:22
【问题描述】:

我的表结构如下:

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

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

谢谢..

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 shlomi,锁定对我们来说不是问题。我们在服务器空闲时插入记录。我的要求是在更短的时间内插入..
    • 我明白了。然而,无论可能发生争用,这种锁定本身都需要时间。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2021-07-24
    • 2016-08-13
    • 2017-12-05
    • 1970-01-01
    • 2014-02-22
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多