Typo3 优化用Extbase生成的SQL查询

Typo3 优化用Extbase生成的SQL查询,typo3,extbase,typo3-6.2.x,Typo3,Extbase,Typo3 6.2.x,我正在对几个有很多记录的表进行查询。在一个特定的表中,关系是m:n,生成的查询连接相应的表。问题是生成的查询速度非常慢。我可以通过取出连接并将其放入一个子查询来重写它,这样做很有效,但我不确定如何将其添加到创建查询的存储库中。基本上,我想要的是仍然使用createQuery(),因为它做了很多检查,但只优化了其中的一小部分 当前的实现是否可能,或者我唯一的选择是从头开始编写整个查询?只需编写一个经过优化的手动查询: $query = $this->createquery(); $query

我正在对几个有很多记录的表进行查询。在一个特定的表中,关系是m:n,生成的查询连接相应的表。问题是生成的查询速度非常慢。我可以通过取出连接并将其放入一个子查询来重写它,这样做很有效,但我不确定如何将其添加到创建查询的存储库中。基本上,我想要的是仍然使用createQuery(),因为它做了很多检查,但只优化了其中的一小部分


当前的实现是否可能,或者我唯一的选择是从头开始编写整个查询?

只需编写一个经过优化的手动查询:

$query = $this->createquery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->statement('your query'); 
return $query->execute(TRUE);

只要查询仍然从属于存储库的表(以及模型的子表)返回记录,Extbase仍将执行您需要的映射,以便能够流畅地访问对象、其子对象及其属性。

也许您可以通过向表中添加一些键来加快联接查询的速度?尝试为查询所联接的列添加键。我已经添加了所有需要的键。问题是如何生成查询。我已经用contains()而不是equals()对其进行了更改,但是当我同时添加排序列时,速度会变慢。您是否尝试为排序列添加键?如果这没有帮助,我没有更多的想法,但可能其他人有。是的,问题不是索引,而是查询在不同表中搜索数据的方式。如果我可以在约束中添加一个简单的自定义语句,它将起作用,但到目前为止我找不到如何做。setReturnRawQueryResult(TRUE)在TYPO3 6.2中不推荐使用-要获得相同的功能,请使用query->execute(TRUE);并删除setReturnRawQueryResult。谢谢,我在描述中修复了它。