2014-11-25 54 views
0

我正在查询有很多记录的几个表。在特定的关系中,关系是m:n,并且生成的查询JOIN合适的表。问题是由此产生的查询非常缓慢。我能够通过删除JOIN并将其放入子查询来重写它,但我不确定如何将其添加到创建查询的存储库中。基本上我想要的是仍然使用createQuery(),因为它做了很多检查,但只优化了它的一小部分。优化与Extbase生成的SQL查询

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

+0

也许你可以通过向表中添加一些键来加速连接查询?尝试为查询连接的列添加键。 – Jost 2014-11-25 16:35:32

+0

我已经添加了所有需要的密钥。问题是如何生成查询。我设法改变它与contains(),而不是equals(),但是当我也添加排序列时,它回到相同的慢速。 – Vladimir 2014-11-25 16:44:11

+0

您是否尝试为订购栏添加按键?如果这没有帮助,我没有更多的想法,但也许别人有。 – Jost 2014-11-25 16:45:45

回答

0

只写优化人工查询:

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

只要查询仍返回从属于库表中的记录(以及模型的孩子),Extbase仍然会做映射你需要有流体访问对象,它的子对象和它们的属性。

+0

setReturnRawQueryResult(TRUE)在TYPO3 6.2中不推荐使用 - 要获得相同的功能,请使用query-> execute(TRUE);并删除setReturnRawQueryResult。 – derhansen 2014-11-26 09:47:07

+0

谢谢,我在说明中修正了它。 – lorenz 2014-11-26 11:20:02