运行查询时超时

时间:2018-12-13 10:49:50

标签: php database mysqli

我必须插入大约75000个数据,这些数据将从另一个表计算中检索。我已经尝试了以下代码。

$start    = new DateTime('2018-09-01');
$end      = new DateTime('2018-12-31');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

foreach ($period as $dt) {
    $inputyear = $dt->format("Y");
    $inputmonth = $dt->format("m");


    Sql = " insert into tbl1()select from ... "
    //HERE I JOIN 3 tables
$result = $conn->query($sql);
}
$conn->close();

它给我超时错误。我也尝试将Wamp超时也增加到300,但没有用。如何优化以上代码?

2 个答案:

答案 0 :(得分:0)

您应该避免在循环中使用查询。我建议使用一个查询一次获取所有数据并在PHP端进行解析。

我还建议检查索引。不使用索引时,多个联接非常繁重。参见https://dev.mysql.com/doc/refman/8.0/en/explain.html

如果需要在运行时访问此数据,请考虑对表结构进行非规范化的功能。

答案 1 :(得分:0)

最糟糕的解决方案

set_time_limit(0);

最佳做法:尝试将此任务委托给后台工作人员(请考虑使用Queue系统)