1

最初,我的问题与 PhpMyAdmin 的 SQL 部分无法正常工作有关。正如评论中所建议的,我意识到这是无法处理的输入量。但是,这并没有为我提供一个有效的解决方案来处理具有(在我的情况下 - 35,000 条记录行)格式为(CSV)的文件:

...
20120509,126,1590.6,0
20120509,127,1590.7,1
20120509,129,1590.7,6
...

PhpMyadmin 中的 Import 选项就像 SQL 部分中的基本复制粘贴输入一样苦苦挣扎。这一次,和以前一样,需要 5 分钟,直到调用最大执行时间,然后停止。有趣的是,它在表中添加了 6-7 千条记录。所以这意味着输入实际上通过并且几乎成功地做到了。我还尝试将文件中的数据量减半。然而一切都没有改变。

现在显然有些不对劲。当简单的数据导入不起作用时,不得不使用 php 脚本中的数据非常烦人。

4

1 回答 1

4

更改您的 php 上传最大大小。

你知道你的 php.ini 文件在哪里吗?

首先,尝试将此文件放入您的 Web 根目录:

phpinfo.php

(见http://php.net/manual/en/function.phpinfo.php

包含:

<?php

phpinfo();

?>

然后导航到http://www.yoursite.com/phpinfo.php

寻找“php.ini”。

要上传大文件,您需要 max_execution_time、post_max_size、upload_max_filesize

另外,您知道您的 error.log 文件在哪里吗?它有望为您提供有关出了什么问题的线索。

编辑:

这是我用于文件导入的查询:

$query = "LOAD DATA LOCAL INFILE '$file_name' INTO TABLE `$table_name` FIELDS TERMINATED BY ',' OPTIONALLY
    ENCLOSED BY '\"' LINES TERMINATED BY '$nl'";

其中 $file_name 是 php 全局变量 $_FILES 中的临时文件名,$table_name 是已经准备好导入的表,$nl 是 csv 行结尾的变量(默认为 windows 行结尾,但我可以选择 linux 行结局)。

另一件事是我的脚本中的表($table_name)是通过首先扫描csv以确定列类型预先准备好的。在确定适当的列类型后,它会创建 MySQL 表来接收数据。

我建议您先尝试创建 MySQL 表定义,以匹配文件中的内容(数据类型、字符长度等)。然后尝试上面的查询,看看它运行的速度有多快。我不知道 MySQL 表定义对速度的影响有多大。

此外,在加载数据之前,我没有在表中定义索引。索引会减慢数据加载速度。

于 2012-05-13T04:45:35.620 回答