gpt4 book ai didi

mysql - 子查询 vs 加入以及在哪里 - 哪个更快?

转载 作者:行者123 更新时间:2023-11-30 21:56:15 25 4
gpt4 key购买 nike

我有两个 sql,结果相同:

查询 1:

SELECT
u.*, COUNT(po.order_id) products_count
FROM (SELECT * FROM orders o WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)) o
LEFT JOIN products_orders po ON po.order_id=o.id
JOIN users u ON u.id=o.user_id
GROUP BY po.order_id

和查询 2:

SELECT
u.*, o.id order_id, COUNT(po.order_id) products_count
FROM users u
JOIN orders o ON o.user_id=u.id
LEFT JOIN products_orders po ON po.order_id=o.id
WHERE o.date >= (CURRENT_DATE() - INTERVAL 1 MONTH)
GROUP BY po.order_id

我想知道.. 哪个应该更快?Query Explains 表明它们是相等的……你们怎么看伙计们? Query 1 Query 2

最佳答案

通常 JOIN 比子查询更有效,并反射(reflect)在 EXPLAIN 输出中。这是因为使用子查询需要动态创建一个虚拟表,然后使用该表进行查询。在现有表上使用 JOIN 会跳过此步骤,并允许优化器以索引或缓存数据的形式利用对该表的了解。

您的 EXPLAIN 在这里相等的可能原因是因为您的子查询非常简单。由于您只是使用 where 条件执行全选,优化器通常会注意到这一点并解析表上的子查询和 JOIN 并稍后应用 WHERE。因此,优化器在执行之前有效地将您的子查询版本重写为您的 JOIN 版本。

关于mysql - 子查询 vs 加入以及在哪里 - 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45109913/

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