我有一个大型数据库,可以查询特定日期之间的行:
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->andX(
Criteria::expr()->gte('receivedAt', $start),
Criteria::expr()->lte('receivedAt', $end)
));
// Do the query and time it
$startCheck = new \DateTime();
$cmails = $em->getRepository(CMail::class)->matching($criteria);
$endCheck = new \DateTime();
$diff = $endCheck->getTimestamp() - $startCheck->getTimestamp();
这将返回0
(因为它四舍五入为秒。
但是,如果我这样做:
/* @var $cmail CMail */
foreach ($cmails as $cmail) {
$endCheck2 = new \DateTime();
$diff2 = $endCheck2->getTimestamp() - $startCheck->getTimestamp();
dump($diff2);
die;
}
它给了我40多秒钟。 ->matching
是否以某种方式延迟加载查询,如果这样,是否可以加快查询速度?我正在使用MySQL 5.7,相应的表大约有10万行,这应该花不了那么长时间,对吗?