gpt4 book ai didi

mysql - 在 Select Mysql 语句中选择

转载 作者:行者123 更新时间:2023-11-29 06:20:02 26 4
gpt4 key购买 nike

所以我有 3 个表,db、db2、db3。我需要 db 中的所有行,还需要 db2 和 db3 中的总数。我想在一个查询中完成,下面的查询有效..

SELECT *, (SELECT COUNT(*) FROM db2) AS total2, (SELECT COUNT(*) FROM db3) AS total3  
FROM db

我想知道的是,既然那些嵌套的 SQL 查询出现在每一行中,它们会运行那么多次吗?还是 mysql 优化它运行一次,使其成为常量,并将其添加到每一行?了解以防数据库变得非常大很重要;

非常感谢有关此问题的答案和引用文档。

最佳答案

我不确定 mysql 是否缓存或优化了您问题中的子查询,但您可以使用交叉连接重写查询以确保计数查询仅运行一次

select * from db
cross join (select count(*) as total2 from db2) t1
cross join (select count(*) as totla3 from db3) t2

<罢工>

更新

我检查了查询计划,mysql 已经优化了您的原始查询,因为它认识到它不是依赖子查询。注意 select_typeSUBQUERY ,它只运行一次,而不是 DEPENDENT SUBQUERY ,每行运行一次(参见 Difference between Subquery and Correlated Subquery )

子查询

+----+-------------+-------+-------+---------------+-----------------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-----------------------+---------+------+-------+-------------+
| 1 | PRIMARY | t2 | ALL | NULL | NULL | NULL | NULL | 106 | NULL |
| 2 | SUBQUERY | t1 | index | NULL | id | 4 | NULL | 38511 | Using index |
+----+-------------+-------+-------+---------------+-----------------------+---------+------+-------+-------------+

交叉连接

+----+-------------+------------+--------+---------------+-----------------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+-----------------------+---------+------+-------+-------------+
| 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | NULL |
| 1 | PRIMARY | t2 | ALL | NULL | NULL | NULL | NULL | 106 | NULL |
| 2 | DERIVED | t3 | index | NULL | id | 4 | NULL | 38511 | Using index |
+----+-------------+------------+--------+---------------+-----------------------+---------+------+-------+-------------+

关于mysql - 在 Select Mysql 语句中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740775/

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