【发布时间】:2013-01-04 20:50:37
【问题描述】:
在我的应用程序中,我有两个 MySQL 表,“units”和“impressions”是一对多的关系。我需要从单位表中获取所有广告单元的列表,还需要获取每个广告单元的展示次数。
我有两个 SELECT 查询来完成这个任务(在这个例子中被简化了),首先使用子选择:
SELECT
(SELECT COUNT(*) FROM impressions WHERE impression_unit_id = unit_id) AS impressions_count,
unit_id
FROM units;
第二次使用 GROUP BY:
SELECT
COUNT(impression_id) AS impressions_count,
unit_id
FROM units
LEFT JOIN impressions ON impression_unit_id = unit_id
GROUP BY unit_id;
为每条记录(广告单元)运行子选择查询,因此 GROUP BY 看起来更智能,但它多了一个 JOIN。在性能方面更喜欢哪一个?
【问题讨论】:
-
两个都试一下,看看它们的表现如何……我希望数据库会为这两个查询提供相同的执行计划,所以我希望它们在性能方面...但是,出于美学原因,我会重新编写您的第二个查询以使用
left join而不是right join。 -
Michael 你说得对,我已经编辑使用 LEFT JOIN 来指出“主”表。