gpt4 book ai didi

MySQL:在列列表中使用 GROUP BY 与子选择

转载 作者:可可西里 更新时间:2023-11-01 08:35:31 25 4
gpt4 key购买 nike

在我的应用程序中,我有两个 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。哪个更适合性能?

最佳答案

GROUP BY 查询会执行得更好。查询优化器可能会优化第一个查询以使用连接,但我不会指望它,因为它是为使用依赖子查询而编写的,这会慢得多。只要表的索引正确,JOIN 就不会成为性能的主要问题。

第一个查询,如果它没有得到优化以使用 JOIN 将不得不为单位表中的每一行运行子查询,其中 JOIN > 查询在一次操作中完成所有操作。

要了解查询是如何优化的,运行两个查询的 EXPLAIN。如果第一个使用依赖子查询,它会更慢。

关于MySQL:在列列表中使用 GROUP BY 与子选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com