【问题标题】:How can I optimize the import of this dataset in mysql?如何在 mysql 中优化此数据集的导入?
【发布时间】:2010-04-26 21:07:23
【问题描述】:

我有以下表架构:

CREATE TABLE `alexa` (
  `id` int(10) unsigned NOT NULL,
  `rank` int(10) unsigned NOT NULL,
  `domain` varchar(63) NOT NULL,
  `domainStatus` varchar(6) DEFAULT NULL,
  PRIMARY KEY (`rank`),
  KEY `domain` (`domain`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

导入数据需要几分钟时间。对我来说,这似乎相当慢,因为我们只讨论了一百万行数据。

我可以做些什么来优化这些数据的插入? (已经在使用禁用键)

【问题讨论】:

  • 奇怪的是你有一个id 列,但它不是主键。

标签: mysql optimization import create-table


【解决方案1】:

使用LOAD DATA INFILE 或等效的命令行工具mysqlimport。这可以比任何其他方法快 20 倍。

您还可以阅读 MySQL 手册中的Speed of INSERT Statements。这有很多提高批量插入性能的技巧。

您对当前插入数据的方式没有说太多(除了禁用键),因此很难推荐任何更具体的关于如何改进它的内容。例如,您使用什么编码语言?您是否使用准备好的查询?

【讨论】:

  • 我使用的是 PHP,不,没有使用准备好的查询。不知道为什么我没有想到那个 LOL。
  • 我有一个脚本可以将 Stack Overflow XML 数据转储加载到 MySQL 数据库中。我使用 PHP 和 PDO 以及准备好的查询。加载确实需要几分钟。我确实使用 mysqlimport 来规范每个帖子的标签,而且运行速度非常快。
【解决方案2】:

如果您不使用复制,请确保 bin 日志 处于关闭状态:

set sql_log_bin=off;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2017-06-13
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多