使用php将多列和多行的大型CSV文件导入mysql表

时间:2019-04-29 10:20:41

标签: php mysql json

  1. 我正在尝试导入大型CSV文件的特定列, 使用PHP到mysql表包含1026列和86400行。
  2. 文件大小为180MB。
  3. 我正在使用LOAD DATA INFILE方法。这需要39秒。我希望将时间减少到2秒以内。

MySQL表仅包含3列ID,TiME,状态。代码如下:

$servername = "localhost";
$username = "root";
$password = "signion";
$db = "In_band";
$conn = mysqli_connect($servername, $username, $password,$db);

if (!$conn) {
   die("Connection failed: " . mysqli_connect_error());
}
$x = "(ID,TIME";
for ($num=1;$num<=1024;$num++){

    $x = $x.",@status".$num;
}
$x = $x.")";

$sql = "CREATE TABLE IF NOT EXISTS table_7(ID INT,TIME TEXT,status TEXT)";
mysqli_query($conn, $sql);
$sql = "LOAD DATA INFILE '/var/lib/files/data86400_1024.csv' REPLACE INTO TABLE table_7 FILEDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n' IGNORE 1 LINES ".$x." set status=@status1024";

$query = mysqli_query($conn, $sql);

mysqli_close($conn);

完整的查询如下:

LOAD DATA INFILE '/var/lib/files/data86400_1024.csv' REPLACE INTO TABLE table_7 FILEDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n' IGNORE 1 LINES (ID,TIME,@status1,@status2,@status3,.......@status1024) set status=@status1024";

在上面的代码中,我将csv文件的最后一列(status1024)导入到mysql表status列中。

我也使用了fgetcsv方法。但是花了将近1分钟。

如何在不到2秒的时间内优化将特定列导入mysql表?

0 个答案:

没有答案