PHP Foreach大数据

PHP Foreach大数据,php,mysql,query-optimization,Php,Mysql,Query Optimization,有一个MySQL表有24500行数据,有一个文本文件有26000个字符串需要插入MySQL,问题是这26000个字符串与MySQL表中的数据重复,所以我们需要比较它们,只插入new/unique 地籍数组-文本文件中的数组 districtArray-mysql数组 当我试着去做 foreach ($cadastreArray as $cadastreValue) { $districtExist = false; foreach ($districtArray as $dist

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

地籍数组-文本文件中的数组

districtArray-mysql数组

当我试着去做

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中的max_execution_time。ini

可能是您可以将mysql字段设置为唯一字段,以便在插入时不会插入,并将生成错误号并继续执行。所以你不需要比较


您可以做的另一件事是增加php中的max_execution_time。ini

可能是您可以将mysql字段设置为唯一字段,以便在插入时不会插入,并将生成错误号并继续执行。所以你不需要比较


您可以做的另一件事是增加php中的max_execution_time。ini

可能是您可以将mysql字段设置为唯一字段,以便在插入时不会插入,并将生成错误号并继续执行。所以你不需要比较


您可以做的另一件事是在php.ini中增加最大执行时间,这是另一个选项。将26k文本文件加载到临时表中(加载数据填充…将很快完成)

然后,您可以基于一个查询执行插入操作,该查询接受临时表,并将其与完整表进行左连接,检查完整表上的字段是否为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
}

?>

另一个选项。将26k文本文件加载到临时表中(加载数据填充…将很快完成)

然后,您可以基于一个查询执行插入操作,该查询接受临时表,并将其与完整表进行左连接,检查完整表上的字段是否为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
}

?>

另一个选项。将26k文本文件加载到临时表中(加载数据填充…将很快完成)

然后,您可以基于一个查询执行插入操作,该查询接受临时表,并将其与完整表进行左连接,检查完整表上的字段是否为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
}

?>

另一个选项。将26k文本文件加载到临时表中(加载数据填充…将很快完成)

然后,您可以基于一个查询执行插入操作,该查询接受临时表,并将其与完整表进行左连接,检查完整表上的字段是否为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
}

?>

在数据库级别进行比较。或者将过程分开。在执行前10k行时,请尝试新建10k,然后在数据库级别进行新建(直到结束)比较。或者将过程分开。在执行前10k行时,请尝试新建10k,然后在数据库级别进行新建(直到结束)比较。或者将过程分开。在执行前10k行时,请尝试新建10k,然后在数据库级别进行新建(直到结束)比较。或者将过程分开。当执行前10k行时,尝试新建10k,然后再新建(直到结束)。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复键更新。此外,如果在找到唯一值时需要更新任何其他字段,请查看重复键更新(例如,上次检查的日期)。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复密钥更新。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复密钥更新。