我每次要往MySQL中插入1000行数据。目前,我使用 PDO 和 for-loop 逐行插入数据库。有没有更有效的方法来获得更好的性能?因为我必须将 max_execution_time 设置为 5 分钟。
function save()
{
return $query = $this->insert("
INSERT INTO gadata (landing_page, page_title, page_views, visits, visitors, bounce_rate, pageviews_per_visit, time_on_page, avg_time_on_page, day, month, year, hour)
VALUES (:landing_page, :page_title, :page_views, :visits, :visitors, :bounce_rate, :pageviews_per_visit, :time_on_page, :avg_time_on_page, :day, :month, :year, :hour)", $this->data);
}
和
protected function insert($sql, array $data) {
$q = $this->_db_handler->prepare($sql);
foreach ($data as $k => $v)
{
$q->bindValue(':' . $k, $v);
}
$q->execute();
}
最佳答案
不是 PDO 也不是您插入的方式导致插入如此延迟,而是 innodb 引擎。所以你有 3 个选择:
- 将所有插入包装到事务中。
- 使用 root 权限,将
innodb_flush_log_at_trx_commit
变量设置为 2,以使 innodb 使用文件缓存进行写入 - 这将使您的插入速度非常快。 - 按照 Manu 的建议在一个查询中运行所有插入
关于php - 使用 PDO 向 MySQL 插入 1000 行的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862561/