1

我运行一个 PHP 脚本,它从文件中读取数据行,分析它们并将它们一一插入到本地 MySQL 数据库中:

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_db);
if ($mysqli->connect_errno) {
  echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
} else {
  /* As long as there is data in the file */
  while(...) {
    ... // analyse each row (contained in an object $data)
    /* Write it to the database table. */
    $mysqli->query($data->getInsertQuery($db_table));
  }
}

我有 4000 万行数据。前几百万个数据集的插入速度非常快,但在过去的 6 小时内只插入了 200 万个(我现在是 3000 万个),而且似乎越来越慢(到目前为止,还没有定义索引! )。

我想知道,这是否是将数据写入表的更有效方式。如果可能的话,我更喜欢没有额外(临时)文件的解决方案。

4

3 回答 3

2

您首先将文件转换为 SQL 文件(如此简单地更改脚本以将语句写入文件)然后使用 mysql 命令行加载它会更有效率,如下所示:

mysql -uuser -p dbname < file.sql

通过如此大的导入,它将为您节省相当多的使用 PHP 的开销。只需记住一次将数据流式传输到文件中一个查询;)

于 2013-05-21T14:59:49.790 回答
1

可以预先生成 SQL 插入命令并将其存储到文件中,然后将数据导入 MySQL。

mysql --default-character=utf8 --user=your_user -p your_db < tbl.sql
于 2013-05-21T14:59:38.673 回答
0

您可以使用准备好的语句来加快速度:

请参阅http://devzone.zend.com/239/ext-mysqli-part-i_overview-and-prepared-statements/我发现谷歌搜索“stackoverflow mysqli 准备好的语句”

于 2013-05-21T15:19:21.723 回答