我正在使用带有教义(2.5(的symfony。我选择了(取自Symfony Profiler->doctrine->query->view runnalbe query(。通过phpMyAdmin或通过doctrine(同时(在网络上需要~200ms。
SELECT col1, col2 ... col 12, MIN(t0_.price) AS sclr_24
FROM tablo t0_
WHERE t0_.visible = (1) AND t0_.status <> (0) AND t0_.price IS NOT NULL
GROUP BY t0_.kat_id
ORDER BY t0_.hotel ASC;
但是如果我从 php 中删除orderBy
- doctrine 将生成此查询:(与以前相同,但没有orderBy
(
SELECT col1, col2 ... col 12, MIN(t0_.price) AS sclr_24
FROM tablo t0_
WHERE t0_.visible = (1) AND t0_.status <> (0) AND t0_.price IS NOT NULL
GROUP BY t0_.kat_id;
这个查询需要的时间几乎是以前的查询,但只有在网络上通过原则,如果我复制这个查询并粘贴到 phpMyAdmin,它花费的时间会少很多(~20 毫秒(。
有人可以解释我为什么吗?或者我必须更改什么才能与phpMyAdmin中的时间相同?
更新:存储库中的代码:
$query = $repository
->createQueryBuilder('t')
->select('t.col1', 't.col2' .... 't.col12', 'MIN(t.price) AS price');
$query->where('t.visible = (:visible)')->setParameter('visible', 1);
$query->andWhere('t.status!= (:status)')->setParameter('splneno', 0);
$query->andWhere('t.priceis not null');
$query->groupBy('t.katId');
$result = $query->getQuery()->getArrayResult();
"phpMyAdmin"中显示的执行时间是查询在服务器上运行所花费的时间 - 它是准确的,并且来自MySQL引擎本身。
不幸的是,结果必须通过网络发送到您的浏览器才能显示,这需要更长的时间。"Doctrine2"是ORM,在包装器和其他东西方面有更多的开销。
此查询是从存储库运行的?实体如何链接到此存储库?如果在存储库外部运行它,时间是否还相同?