我正在尝试仅在WHERE places.x < 5
为真的情况下收集某个地方的物品数量。原因是at_places
和places
表都包含数万行。
这是我想要做的一般概念;但我无法测试它,因为它需要很长时间才能完成。我认为能够同时包含抓取计数和一个查询中的位置比运行后续查询抓取每个返回位置的计数要快得多。
SELECT `places`.`id`,
`places`.`name`,
(SELECT COUNT(*) FROM `at_places` WHERE places_id=places.id) AS count
FROM `places`
WHERE places.x < 5
答案 0 :(得分:1)
您可能会发现显式联接效果更好:
select p.id, p.name, ap.cnt
from places p join
(select ap.places_id, count(*) as cnt from at_places ap group by ap.places_id) ap
on p.id = ap.places_id
where p.x < 5
我认为您的性能问题是由于子查询对外部查询中的每一行执行一次。 at_places.places_id
上的索引也应该加快查询速度。