导入CSV MySQL Workbench Mac Catalina非常慢

问题描述

我有一个Macbook pro 2019 touch,i5、8M,HD 256 GB使用的75GB,OSX 10.15.2。安装了ampps 3.9和Msql Workbench 8.0

我正在导入Localhost,这是一个CSV 1.9 GB 1500万寄存器的MysqL表,在12小时后仅导入了300万。

已经探测XAMPP VM并在mariaDB控制台中执行LOAD DATA INFILE失败。它与数据库断开连接。

我将使用PHP处理表。有任何帮助或建议,以便使这些过程变得更快吗?

我使用Sequel pro读取远程数据库,速度非常快,但不再适用于本地主机。

非常感谢

解决方法

在将csv文件(大约5百万条记录)导入mysql表时,我遇到了类似的问题。我设法使用nodejs做到了这一点,因为它能够逐行打开和读取文件(而无需将整个文件加载到ram中)。该脚本读取100行,然后进行INSERT,然后读取另外100行,依此类推。它在大约9分钟内处理了整个文件。它使用readline模块。脚本的主要部分如下所示:

const Fs = require('fs');
const Mysql = require('mysql2');
const Readline = require('readline');
const fileStream = Fs.createReadStream('/path/to/file');
var dbConnection = Mysql.createConnection({
  host : "yourHost",user : "yourUser",password : "yourPassword",database : "yourDatabase"
});
const rl = Readline.createInterface({
  input: fileStream,crlfDelay: Infinity
});
async function run() {
  var lineElements = [];
  for await (const line of rl) {
    // Each line in will be successively available here as `line`.
    lineElements = line.split(",");
    // now lineElements is an array containing all the values of the current line
    // here you can queue up multiple lines,to make a bigger insert
    // or just insert line by line
    await dbConnection.query('INSERT INTO ..........');
  }
}
run();

上面的脚本在每个查询中插入一行。如果要查询插入100行或任何其他值,则可以随意修改它。

请注意:因为我的文件是“受信任的”,所以我没有使用准备好的语句,因为我认为简单查询的速度更快。我不知道速度增益是否显着,因为我没有进行任何测试。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...