【发布时间】:2013-04-07 17:02:27
【问题描述】:
仅当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
【问题讨论】:
-
这个查询不应该花那么长时间。
at_places.id、places.id和places.x字段是否有索引? -
仅在 ID 上。我还有很多东西要进行比较以减少地点列表,为了清楚起见,我只是使用 x 作为占位符。
-
如果您在
WHERE子句中使用的字段编制索引,它仍然可能有助于加快查询速度。使用EXPLAIN SELECT ...查看正在使用的索引。 -
我考虑过。我的主要问题是 at_places 至少每天更改一次,有时更频繁。我认为插入的放缓会超过好处?但也许不是,我想我可以试试。