微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

相同的mariaDB在PHP 7.4中的插入速度比使用FAT FREE的PHP 7.1慢得多

如何解决相同的mariaDB在PHP 7.4中的插入速度比使用FAT FREE的PHP 7.1慢得多

我正在尝试将旧版的PHP / Fat Free项目从PHP 7.1迁移到7.4,我发现某些查询花费的时间太长(例如,时间增加了10倍)。特别是一些插入物。我在本地主机中使用xampp(7.1.32和7.4.6)运行相同的项目,并始终使用完全相同的数据库使用完全相同的MariaDB服务器(v10.4.8)。

代码是这样的:

foreach($ridiculouslyLongArray as $row) //I'm talking about some millons of rows
  $this->db->exec("INSERT INTO a_table (field1,field2,fieldn) VALUES ('".$row['field1']."','".$row['field2']."','".$row['fieldn']."')"); 

//是的,它可以进行sql注入,我也将解决此问题

一个$ this-> db的定义:

$this->db = new DB\sql('MysqL:host=localhost;port=3306;dbname=something','dbuser','dbpassword',array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));

据我所知,它是PDO的包装。

我试图更改代码以在每个查询中插入多行,但是查询仍然比PHP 7.1花费更多的时间。

这是我的设置

->原始项目(查询运行正常)

  • PHP 7.1.32(内存限制2048mb)
  • 无脂肪3.6.4
  • MariaDB 10.4.8

->新项目(查询运行缓慢)

  • PHP 7.4.6(内存限制2048mb)
  • 免费脂肪3.7.2
  • MariaDB 10.4.8(与上一个服务器和数据库相同)

感谢您的时间。

编辑:我刚刚注意到MysqL的PDO驱动程序在版本之间是不同的

对于PHP 7.1:

  • MysqLnd 5.0.12-dev-20150407-$ Id:38fea24f2847fa7519001be390c98ae0acafe387 $

对于PHP 7.4:

编辑2:查询处于事务中,并且使用相同的索引和相同的dB引擎,因为在同一服务器上同一数据库中同一表上的相同插入是相同的。代码没有任何变化,只有PHP版本。

解决方法

注释中没有明确提及,但是可能导致查询速度变慢的其他原因是查询记录。

默认情况下,Fat-Free将记录所有数据库查询。如果您正在运行大量的插入,则将记录所有这些插入。如果还没有,我建议在生产中禁用查询日志记录。无论您的bootstrap / services文件在哪里建立db连接,我都会在它后面添加:

$f3->set('db',new DB\SQL(/* config stuff */));
if(ENVIRONMENT === 'PRODUCTION') { // or whatever you use to signal it's production
    $f3->db->log(false);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。