RedBeanPHP慢R :: exportAll()

时间:2017-03-06 18:54:03

标签: php postgresql performance redbean

我正在使用RedBeanPHP连接到Postgres数据库,但是对于其他简单的查询,我遇到的查询时间很慢。这似乎与RedBean的exportAll()有关。我访问的类似于RedBean的例子:

$books = R::findAll( 'book' );
$beans= R::exportAll( $books );

直接使用查询:

$rows = R::getAll($sql);
$books = R::convertToBeans('books', $rows);
$beans= R::exportAll( $books );

此查询在一个只有66的表上大约需要1.25秒,并且有两个映射表(在RedBean中链接)。此查询时间似乎非常慢,并且与R :: exportAll()直接相关。

版本:

  • RedBeanPHP = 4.3.3
  • PostgreSQL = 9.6.2
  • PHP = 7.0.15-0ubuntu0.16.04.4
  • OS = Ubuntu

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

经过大量研究后,我在'duplicate' section of the RedBeanPHP website中找到了一个描述以下内容的模糊:

  

dup()和exportAll()都需要查询数据库模式   慢。要加速该过程,您可以传递数据库模式:

R::$duplicationManager->setTables( $schema ); To obtain the schema use:

$schema = R::$duplicationManager->getSchema(); You can now use this schema to feed it to setTables(). R::duplicate() and
     

R :: exportAll()都使用此架构。

这正是我所经历的,但由于$ duplicationManager现在是一个私有变量(Found here in the API),我无法访问R::$duplicationManager->getSchema()

幸运的是,有一个' getDuplicationManager()'在API文档中进一步发挥作用,取得了巨大的成功:

$schema = R::getDuplicationManager()->getSchema();
R::getDuplicationManager()->setTables($schema);

这使我的时间减少到约0.14秒,这更合理。