PHP for每个大数据



有24500行数据的MySQL表,有26000字符串的数据需要插入到MySQL的文本文件,问题是这26000字符串重复MySQL表中的数据,所以我们需要比较它们,只插入新的/唯一的。

cadastreArray - array from text file

distritarray - mysql array

当我尝试做

foreach ($cadastreArray as $cadastreValue) {
    $districtExist = false;
    foreach ($districtArray as $districtData) {
        if ($cadastreValue[0] == $districtData['1']) {
            $districtExist = true;
            break;
        }
    }
}
if(!$districtExist) { MySQL INSERT ... }

我得到执行时间错误,甚至3分钟是不够的。也许你能提供更好/更快的方法?

也许你可以将mysql字段设置为唯一的,这样当你要插入时,它将不会插入,并且会生成错误号并继续执行。所以你不需要比较。

你还可以在php。ini中增加max_execution_time

另一个选项。将26k的文本文件加载到临时表中(Load DATA INFILE…

然后你可以根据一个查询执行插入,该查询获取你的临时表,并对你的完整表进行左连接,检查完整表上的字段是否为NULL。

这里有一个简单的脚本示例:-

<?php
$file = "SomeTextFile.txt";
$sql = "CREATE TEMPORARY TABLE cadastre
(
    field1 INT,
    field2 VARCHAR(255),
    etc...
)";
if(!($db->query($sql)))
{
    die($db->error());// if error, stop script
}
if(!($db->query("LOAD DATA INFILE '$file' INTO TABLE cadastre")))
{
    die($db->error());// if error, stop script
}
$sql = "INSERT INTO district (field1, field2, field3, ......)
        SELECT a.field1, a.field2, a.field3
        FROM cadastre a
        LEFT OUTER JOIN district b
        ON a.field1 = b.field1
        WHERE b.field1 IS NULL";
if(!($db->query($sql)))
{
    die($db->error());// if error, stop script
}
?>

确保临时表和要插入的表都添加了有用的索引。

相关内容

  • 没有找到相关文章

最新更新