PHP Foreach大数据
有一个MySQL表有24500行数据,有一个文本文件有26000个字符串需要插入MySQL,问题是这26000个字符串与MySQL表中的数据重复,所以我们需要比较它们,只插入new/unique 地籍数组-文本文件中的数组 districtArray-mysql数组 当我试着去做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
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,然后再新建(直到结束)。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复键更新。此外,如果在找到唯一值时需要更新任何其他字段,请查看重复键更新(例如,上次检查的日期)。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复密钥更新。此外,如果在找到唯一值时需要更新任何其他字段(例如,上次检查的日期),请查看重复密钥更新。