0

WHERE places.x < 5只有当这是真的时,我才试图在一个地方收集物品的数量。原因是at_placesplaces表都包含数万行。

这是我正在尝试做的事情的总体思路;但我无法测试它,因为它需要很长时间才能完成。我认为能够在一个查询中同时包含计数的抓取和位置会比运行后续查询来抓取返回的每个位置的计数要快得多。

SELECT  `places`.`id`, 
        `places`.`name`,
        (SELECT COUNT(*) FROM `at_places` WHERE places_id=places.id) AS count
FROM `places`
WHERE places.x < 5
4

1 回答 1

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也应该加快查询速度。

于 2013-04-15T14:25:43.647 回答