最近我遇到了条令2.1的性能问题。在我的请求中,我有很多“left joins”、“where”和“where in”子句,我需要total count+基于limit和offset的特定记录集。首先,条令2.1不支持mysql选项限制。我试图将limit附加到查询,但每次都得到“error expected end of string get'limit'”。我试着用
$queryBuilder
->setMaxResults(25)
->setFirstResult(10);
正如许多文章中所建议的,但正如文档中所说http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-和最大结果项仅dql查询
如果查询包含指定结果限制的fetch联接集合,则方法的工作方式与预期不同。
也就是说,如果你期望每页25行,你可以得到18行。doctine2.1默认情况下没有paginator作为条令2.2,所以每个人都建议使用条令扩展https://github.com/wiredmedia/doctrine-extensions/blob/master/lib/doctrineextensions/paginate/paginate.php,但它也很蹩脚,降低了性能。据我所知,它发送2个请求:1个请求获取所有日期,没有限制和偏移量,以计数total count,第二个请求是带有特定实体ID的“where in”请求。对我来说太慢了。所以你可能想知道我的解决方案是什么:
$data = $oQuery->getArrayResult();
return array(
'data' => array_slice($data, $iStart, $iLimit),
'count' => count($data)
);
如果你有更好更快的解决方案,请与我分享。
1条答案
按热度按时间qni6mghb1#
虽然您的查询没有出现在问题中,但您只有两个选项:要么使用原始sql,要么使用所有必要的查询
LIMIT
或升级版本。