美文网首页
数据库中多表连接的原理实现

数据库中多表连接的原理实现

作者: 奥特曼打_小怪兽 | 来源:发表于2018-12-18 14:34 被阅读0次

多变关联的实现方式有hash join,merge join,nested loop join 方式,具体使用那种内型的连接,主要依据:

1.当前的优化器模式(all_rows和rule)

2.取决于表的大小

3.取决于关联字段是否有索性

4.取决于关联字段是否排序

Hash  join散列连接,优化器选择较小的表(数据量少的表)利用连接键(join key)在内存中建立散列表,将数据存储到hash列表中,然后扫描较大的表

select A.*,B.* from A left join B on a.id=b.id。

先是从A表读取一条记录,用on条件匹配B表的记录,行成n行(包括重复行)如果B表没有与匹配的数据,则select中B表的字段显示为空,接着读取A表的下一条记录,right join类似。

left join基本是A表全部扫描,在表关键中不建议使用子查询作为副表,比如select A.*,B.*from A left join (select * from b where b.type=1 )这样A表是全表扫描,B表也是全表扫描。若果查询慢,可以考虑关联的字段都建索引,将不必要的排序去掉,排序会导致运行慢很多。

主副表条件过滤:

table a(id, type):

id    type

----------------------------------

1      1       

2      1         

3      2   

表b结构和数据

table b(id, class):

id    class

---------------------------------

1      1

2      2

Sql语句1: select a.*, b.* from a left join b on a.id = b.id and a.type = 1;

执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1            2        2

3        2

a.type=1没有起作用

sql语句2:

select a.*, b.* from a left join b on a.id = b.id where a.type = 1;

执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1            2        2

sql语句3:

select a.*, b.* from a left join b on a.id = b.id and b.class = 1;

执行结果为:

a.id    a.type    b.id    b.class

----------------------------------------

1        1            1        1

2        1           

3        2

b.class=1条件过滤成功。

结论:left join中,左表(主表)的过滤条件在on后不起作用,需要在where中添加。右表(副表)的过滤条件在on后面起作用。

Mysql join原理:

Mysql join采用了Nested Loop join的算法,

###坐车 回去补充。

相关文章

  • 数据库中多表连接的原理实现

    多变关联的实现方式有hash join,merge join,nested loop join 方式,具体使用那种...

  • 个人永久性免费-Excel催化剂功能第57波-一键生成完全组合的

    在数据库的多表查询中,通常会有各种连接关系,同样地在Excel环境中,也有很大的场景需要用到类似数据库的多表查询,...

  • MapReduce实现‘多表关联’

    多表关联和单表关联相似,都类似于数据库中的自然连接。相比单表关联,多表关联的左右表和连接列更加清楚。所以可以采用和...

  • MYSQL多表查询

    多表查询就是从多张表中查找所需数据,并且整合在一起显示出来的意思 多表查询拥有多种实现方式:内连接、外连接、子查询...

  • 深入浅出MySQL(五)

    多表查询 MySQL中的多表联查 MySQL中多表查询分为三种形式: 笛卡尔积的形式 内连接的形式 外连接的形式 ...

  • JDBC原理

    JDBC接口及数据库厂商实现 工作原理 加载驱动,建立连接:DriverManager 创建语句对象:Statem...

  • 2018-09-21数据库&多表关联&增删改&a

    数据库&多表关联&增删改&数据库备份 多表关联 两表关联,必须有一个关联字段 关联方法 where(原理) 第一步...

  • Oracle学习day-28:多表查询

    一、多表连接查询 1.多表连接语法 主要解决目标数据分布在不同的表中(如果目标数据不再一张表,可以通过多表连接查询...

  • Python实现Mysql数据库连接池

    Python实现Mysql数据库连接池 python连接Mysql数据库: python编程中可以使用MySQLd...

  • Mysql学习笔记(5)-"数据库设计" 和

    目录: 1.数据库设计 2.关联查询 1.多表查询 2.内连接查询 3.左连接查询 4.右连接查询 一.数据库设计...

网友评论

      本文标题:数据库中多表连接的原理实现

      本文链接:https://www.haomeiwen.com/subject/fcgckqtx.html