当使用 Workbench 并使用大型数据集(数百万行)对临时表执行查询时,我看到执行时间约为 7 秒(包括最终选择)——这是可以接受的。但是,当我通过 PHP/PDO 运行相同的查询时,查询在插入临时表时会减慢到几分钟。
只要使用临时表,这种行为似乎就是这种情况。
我的想法是,查询使用了适当的索引,并且 MariaDB 数据库配置正确,因为在使用 Workbench 时,查询确实可以正确有效地运行。我还假设有足够的 RAM 等
将 PDO 设置视为可能的原因。我目前正在使用:
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
PDO::MYSQL_ATTR_FOUND_ROWS => true,
PDO::MYSQL_ATTR_COMPRESS => true
特别是对于这个查询,我设置:
PDO::MYSQL_ATTR_DIRECT_QUERY => true
我也在使用准备好的语句使用
$result = self::$dbh->prepare($query);
$result->execute($params);
无论如何,似乎没有什么会影响通过 PHP/PDO 运行时的响应时间。有任何想法吗?可以在这里做些什么来提高性能吗?
PHP/PDO 客户端 API 版本 => mysqlnd 7.4.33 / MariaDB 10.8.3