我尝试将我的数据上传到mysql它的工作但它需要35秒,太多秒。
我需要在代码中更改它的工作时间超过35秒?
我使用php编写我的代码和SQL查询,将数据发送到我的表中,该表调用了" words"
在我的数据库中,我有4列('字',' num','点击',' instoplist')
我可以采取哪些措施来解决这个问题?
由于
这是我的代码:
<?php
function removeStopWordsFromArray($words)
{
.......
insert($words);
}
function insert($myWords)
{
global $conn;
foreach ($myWords as $key => $value) {
$word = $value['word'];
$number = $value['document'];
$hit = $value['hit'];
$stop = $value['stopList'];
$sql = "INSERT INTO words (word,num,hit,instoplist) VALUES ('$word', '$number', '$hit','$stop')";
if($conn->query($sql)!== TRUE)
{
echo "error". $conn->error;
}
}
fclose($fp);
}
$temp = pareseDocs();
removeStopWordsFromArray($temp);
?>
答案 0 :(得分:3)
对于您在DB中运行查询的每个数据。但在您的情况下,正确的方法是批量插入数据。您可以按照以下方式编写代码:
$sql = "INSERT INTO words (word,num,hit,instoplist) VALUES";
foreach ($myWords as $key => $value) {
$word = $value['word'];
$number = $value['document'];
$hit = $value['hit'];
$stop = $value['stopList'];
$sql .= "('$word', '$number', '$hit','$stop'),";
}
$sql = rtrim($sql,',') //to remove last comma
if($conn->query($sql)!== TRUE)
{
echo "error". $conn->error;
}
这将仅在DB中运行单个查询。因此会更快。
答案 1 :(得分:0)
您可以在循环外尝试此查询只传递一个查询:
INSERT IGNORE INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )
处理错误的忽略
答案 2 :(得分:0)
查看https://stackoverflow.com/a/452934/4988637以了解有关如何在单个查询中插入多个行的更多信息。
如果您将方法更改为单个查询,您应该会发现程序的运行时间会大幅缩短。
在SQL Server 2008中,您可以使用单个SQL插入多行 INSERT语句。
INSERT INTO MyTable ( Column1, Column2 ) VALUES ( Value1, Value2 ), ( Value1, Value2 )
有关参考,请参阅MOC课程2778A - 编写SQL SQL Server 2008中的查询。
在您的情况下,您可以修改代码,使其类似于以下内容。
$sql = "INSERT INTO words (word, num, hit, instoplist) VALUES ";
foreach($myWords as $key => $value) {
$word = $value['word'];
$number = $value['document'];
$hit = $value['hit'];
$stop = $value['stopList'];
$sql .= "('$word', '$number', '$hit','$stop'),";
}
$sql = rtrim($sql, ',');
if($conn->query($sql) !== true) {
echo "error".$conn->error;
}