条令2.1性能问题

zu0ti5jz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(334)

最近我遇到了条令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)
);

如果你有更好更快的解决方案,请与我分享。

qni6mghb

qni6mghb1#

虽然您的查询没有出现在问题中,但您只有两个选项:要么使用原始sql,要么使用所有必要的查询 LIMIT 或升级版本。

相关问题