Hi all,
I am seeing a significant increase in overall execution time when using
Doctrine Paginator (520ms to 735ms) within a ZF2 project. It would be great
to hear if there is anything I can do to improve this. I am using ZF 2.1.5
with PHP 5.3.8.
- To get comparable results I am using in both cases the same
QueryBuilder object.
- Once executed through Paginator:
$d2_paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($dql);
$adapter = new
\DoctrineORMModule\Paginator\Adapter\DoctrinePaginator($d2_paginator);
$paginator = new \Zend\Paginator\Paginator($adapter);
$paginator->setItemCountPerPage(25);
$paginator->setCurrentPageNumber(1);
- Once executed directly through Doctrine:
$qb->setMaxResults(25);
$query = $qb->getQuery();
$result = $query->getResult();
So far as I can see in the profiler when using Paginator, the increase
results from hydration in
Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateAllData . I am
wondering why this is such a large increase. I guess in both cases hydration
time should be nearly equal.
I already tried whether it makes a difference when joining all necessary
associations within the QueryBuilder object. But this results almost in the
same increase
$qb = $em->createQueryBuilder();
$qb->select(array('mainTable','e','o',
'feeprices','fee','feegroup','partner',
'partnerFeeprices','partnerFee','partnerFeegroup'));
$qb->from($this->getEntityName(),'
mainTable','mainTable.id');
$qb->innerJoin('mainTable.event', 'e' , 'WITH', 'e.deleted =
0');
$qb->leftJoin('mainTable.feeprices', 'feeprices' , 'WITH',
'feeprices.deleted = 0 ');
$qb->leftJoin('feeprices.fee', 'fee' , 'WITH', 'fee.deleted
= 0');
$qb->leftJoin('fee.feegroup', 'feegroup' , 'WITH',
'feegroup.deleted = 0'); $qb->select(array('mainTable','e','o',
'feeprices','fee','feegroup','partner',
'partnerFeeprices','partnerFee','partnerFeegroup'));
$qb->leftJoin('mainTable.partner', 'partner' , 'WITH');
$qb->leftJoin('partner.feeprices', 'partnerFeeprices' ,
'WITH', 'partnerFeeprices.deleted = 0');
$qb->leftJoin('partnerFeeprices.fee', 'partnerFee' , 'WITH',
'partnerFee.deleted = 0');
$qb->leftJoin('partnerFee.feegroup', 'partnerFeegroup' ,
'WITH', 'partnerFeegroup.deleted = 0');
versus
$qb = $em->createQueryBuilder();
$qb->select(array('mainTable'));
$qb->from($this->getEntityName(),'
mainTable','mainTable.id');
Best Regards
Christian