首页 > 解决方案 > 运行查询超时

问题描述

我必须插入大约 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,但它没有用。如何优化上面的代码?

标签: phpdatabasemysqli

解决方案


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

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

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


推荐阅读