gpt4 book ai didi

mysql - 连接与子查询来计算嵌套对象的数量

转载 作者:行者123 更新时间:2023-11-29 20:49:19 28 4
gpt4 key购买 nike

假设我的模型包含 2 个表:人员和地址。一个人可以拥有 O、1 个或多个地址。我正在尝试执行一个查询,列出所有人员并包括他们各自拥有的地址数量。这是我必须实现的两个查询:

SELECT
persons.*,
count(addresses.id) AS number_of_addresses
FROM `persons`
LEFT JOIN addresses ON persons.id = addresses.person_id
GROUP BY persons.id

SELECT
persons.*,
(SELECT COUNT(*)
FROM addresses
WHERE addresses.person_id = persons.id) AS number_of_addresses
FROM `persons`

我想知道其中一个在性能方面是否比另一个更好。

最佳答案

确定性能特征的方法是实际运行查询并查看哪个更好。

如果您没有索引,那么第一个可能更好。如果您在 addresses(person_id) 上有索引,那么第二个可能更好。

原因有点复杂。基本原因是 group by(在 MySQL 中)使用排序。并且,排序的复杂度为 O(n * log(n))。因此,排序的时间比数据增长得快(不是快很多,但快一点)。结果是,每个人的一堆聚合比每个人对所有数据的一次聚合要快。

这是概念性的。事实上,MySQL 会在相关子查询中使用索引,因此它通常比整体上不使用索引的 group by 更快。​​

关于mysql - 连接与子查询来计算嵌套对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38187550/

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