我运行一个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个小时内只插入了两百万个(我现在有3000万个),而且似乎变得越来越慢(到目前为止,还没有定义索引!)。
我想知道,这是不是一种更有效的写入表的方法。如果可能的话,我会优先推荐一个没有额外(临时)文件的解决方案。
发布于 2013-05-21 22:59:50
首先将您的文件转换为SQL文件(因此,简单地更改您的脚本以将语句写到文件中),然后使用mysql命令行加载它会更有效:
mysql -uuser -p dbname < file.sql对于如此大的导入,它将为您节省大量使用PHP的开销。只需记住将数据流式传输到文件中,一次一个查询;)
发布于 2013-05-21 22:59:39
可以预先生成SQL insert命令并将其存储到文件中,然后将数据导入MySQL。
mysql --default-character=utf8 --user=your_user -p your_db < tbl.sql发布于 2013-05-21 23:19:22
您可以使用预准备语句来提高速度:
参见我在http://devzone.zend.com/239/ext-mysqli-part-i_overview-and-prepared-statements/上搜索到的"stackoverflow mysqli prepared“。
https://stackoverflow.com/questions/16673106
复制相似问题