多表关联的SQL语句到底是如何执行原理

举报
JavaEdge 发表于 2022/02/21 22:58:23 2022/02/21
【摘要】 平时大多是执行单表查询,通常你把索引建好,让他尽可能走索引,性能都没问题。但其实也有不少的多表关联语句,因为有时查找目标数据,不得不借助多表关联的语法,才能实现你想要但使用多表关联的时候,你的SQL性能就可能会遇到一些问题。 最基础的多表关联查询的执行原理select * from t1,t2 where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xx...

平时大多是执行单表查询,通常你把索引建好,让他尽可能走索引,性能都没问题。但其实也有不少的多表关联语句,因为有时查找目标数据,不得不借助多表关联的语法,才能实现你想要但使用多表关联的时候,你的SQL性能就可能会遇到一些问题。

最基础的多表关联查询的执行原理

select * from t1,t2 
	where t1.x1=xxx 
		and t1.x2=t2.x2 
		and t2.x3=xxx

若在FROM字句后直接来两个表名,就是要针对两个表进行查询,而且会把两个表的数据给关联,假设你未限定多表连接条件,可能会搞出一个笛卡尔积。所以通常都会在多表关联语句中的WHERE子句里引入一些关联条件:where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx

  • t1.x1=xxx

    明确绝对不是多表关联的连接条件,而是针对t1表的数据筛选条件,从t1筛选一波数据再和t2表关联

  • 然后t2.x3=xxx,也不是关联条件,他也是针对t2表的筛选条件

  • 真正的关联条件 t1.x2=t2.x2

    必须要t1表里的每条数据根据自己的x2字段值关联t2 表里的某条记录,要求t1表里这条数据的x2值==t2表里的那条数据的x2字段值

假设:

  • t1表里有1条数据x2=265
  • t2有2条数据x2=265
  • 就会把t1表里的那条数据和t2表的2条数据分别关联,最终返你两条关联后数据。

所以该SQL执行过程可能是:

  • 首先根据t1.x1=xxx筛选条件,去t1查出一批数据,此时可能是const、ref,也可能index或all,具体看你的索引如何建的
  • 假设从t1按t1.x1=xxx条件筛选出2条数据
  • 接着对这两条数据,根据每条数据的x2字段值及t2.x3=xxx条件,去t2表里找x2、x3字段值都匹配的数据。比如t1表第一条数据的x2=265,就根据t2.x2=265和t2.x3=xxx这俩条件,找出一波数据,比如找出来2条吧
  • 此时就把t1表里x2=265的那个数据 和 t2表里t2.x2=265和t2.x3=xxx的两条数据关联,t1表里另外一条数据如法炮制

他可能是先从一个表里查一波数据:驱动表

再根据这波数据去另外一个表里查一波数据进行关联,另外一个表叫:被驱动表

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。