mysql临时表关联查询_MySQL如何执行关联查询

MySQL将任何查询视为关联操作,包括单表查询和子查询。它使用嵌套循环关联策略,先读取一个表的数据,然后在其他表中寻找匹配。对于JOIN查询,MySQL通过迭代每张表的行来找到匹配项。对于UNION,MySQL先创建临时表,再进行合并。全外连接因无法有效转换为嵌套循环而未被支持。在编写复杂查询时要注意临时表的性能影响,因为它们没有索引。
摘要由CSDN通过智能技术生成

MySQL中‘关联(join)’ 一词包含的意义比一般意义上理解的要更广泛。总的来说,MySQL认为任何一个查询都是一次‘关联’ --并不仅仅是一个查询需要到两个表的匹配才叫关联,索引在MySQL中,每一个查询,每一个片段(包括子查询,设置基于表单的select)都可能是关联。

所以,理解MySQL如何执行关联查询至关重要。我们先来看一个union 查询的例子。对于union查询,MySQL先将一系列的单个查询结果放到一个临时表中,然后再重新读出临时表数据来完成union查询。在MySQL的概念中,每个查询都是一次关联,所以读取结果的临时表也是一次关联。

当前MySQL关联执行的策略很简单:MySQL对任何关联都执行嵌套关联的操作,即MySQL在一个表中循环读出单条数据,然后在嵌套循环到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的结果未知。然后根据各个表匹配的行,返回查询中需要的各个列。MySQL会尝试在最后一个关联表中找到所有匹配的行,如果最后一个关联表无法找到更多的行以后,MySQL会返回到上一层关联表,看是否能够找到更多的匹配记录,以此类推迭代执

按照这样的方式查找第一个表记录,在嵌套查询下一个关联表,然后回溯到上一个表,在MySQL中是通过嵌套循环的方式实现--正如其名“嵌套循环关联”。请看下面例子中的简单查询:

SELECT tbl1.col1,tbl2.col2 FROM tbl1 INNER JOIN tbl2 USING (col3) WHERE tbl1.col1 in (3,4);

假设MySQL按照查询中的表顺序进行关联操作,我们则可以用下面的伪代码表示MySQL将如何完成这个查询。

outer_iter =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:阿里巴巴的代码规范中建议不执行三张表以上的多表联合查询,因为在表数据量大且没有索引的情况下,多表联合查询可能会导致数据量非常大,从而降低SQL执行效率。他们更建议多次进行单表查询,然后在service中进行参数拼接。\[1\] 引用\[2\]:UNION查询是将多个SELECT查询的结果合并成一个查询结果的方法。在客户端查询会话结束时,临时表会被自动删除,保证数据库整洁高效。使用UNION时,需要确保所有SELECT语句中的字段数目相同。\[2\] 引用\[3\]:内连接(INNER JOIN)是一种等值连接,需要指定等值连接条件。在MySQL中,CROSS JOIN和INNER JOIN被划分在一起。\[3\] 问题: MySQL多表关联查询的优势是什么? 回答: MySQL多表关联查询的优势在于可以通过联合多个表的数据来获取更全面的信息。通过多表关联查询,可以避免进行多次单表查询,从而减少了数据库的访问次数,提高了查询效率。此外,多表关联查询还可以通过联合多个表的字段来进行数据的筛选和排序,使得查询结果更加灵活和准确。然而,需要注意的是,在表数据量大且没有索引的情况下,多表联合查询可能会导致数据量非常大,从而降低SQL执行效率。因此,在实际应用中,需要根据具体情况来选择是否使用多表关联查询。\[1\] #### 引用[.reference_title] - *1* [MySQL 多次单表查询和多表联合查询的优缺点分析-Fun言](https://blog.csdn.net/weixin_29602351/article/details/116106693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MySQL多表查询优化](https://blog.csdn.net/weixin_40000999/article/details/111752075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Mysql 多表联合查询效率分析及优化](https://blog.csdn.net/weixin_28785681/article/details/113713493)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值