我正在查询有很多记录的几个表。在特定的关系中,关系是m:n,并且生成的查询JOIN合适的表。问题是由此产生的查询非常缓慢。我能够通过删除JOIN并将其放入子查询来重写它,但我不确定如何将其添加到创建查询的存储库中。基本上我想要的是仍然使用createQuery(),因为它做了很多检查,但只优化了它的一小部分。优化与Extbase生成的SQL查询
它可能与当前的实现,或者是我唯一的选择从头开始写整个查询?
我正在查询有很多记录的几个表。在特定的关系中,关系是m:n,并且生成的查询JOIN合适的表。问题是由此产生的查询非常缓慢。我能够通过删除JOIN并将其放入子查询来重写它,但我不确定如何将其添加到创建查询的存储库中。基本上我想要的是仍然使用createQuery(),因为它做了很多检查,但只优化了它的一小部分。优化与Extbase生成的SQL查询
它可能与当前的实现,或者是我唯一的选择从头开始写整个查询?
只写优化人工查询:
$query = $this->createquery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->statement('your query');
return $query->execute(TRUE);
只要查询仍返回从属于库表中的记录(以及模型的孩子),Extbase仍然会做映射你需要有流体访问对象,它的子对象和它们的属性。
也许你可以通过向表中添加一些键来加速连接查询?尝试为查询连接的列添加键。 – Jost 2014-11-25 16:35:32
我已经添加了所有需要的密钥。问题是如何生成查询。我设法改变它与contains(),而不是equals(),但是当我也添加排序列时,它回到相同的慢速。 – Vladimir 2014-11-25 16:44:11
您是否尝试为订购栏添加按键?如果这没有帮助,我没有更多的想法,但也许别人有。 – Jost 2014-11-25 16:45:45