我们来学mysql -- 连接(原理版)
我们来学mysql -- 连接
- 题记
- 两张表
- 驱动表
题记
- 回到初学者的视角,navicat或命令窗口,呈现一行行数据,类比为excel工作薄更是深入人心
- 通过join将多表的记录关联起来,这似乎也没啥问题
- 只是好像是那么回事,又…似乎有想说却表述不清的困惑
- 其实,困惑的原因无非就是源于认识的不足,青少年的成长困惑如此,世间都是如此
- 翻看《建立索引》《使用索引》,为各位看官,减少或者增加困惑,人生不过如此
两张表
t1f1 | t1f2 | t1f3 | t1f4 |
---|---|---|---|
7 | b | c | d |
·· | ·· | ·· | ·· |
t2f1 | t2f2 | t2f3 | t2f4 |
---|---|---|---|
3 | b | c | d |
7 | h | a | cc |
·· | ·· | ·· | ·· |
驱动表
-
多表关联查询,总得有个先开始查的表,就叫它驱动表
-
select * from t1 , t2 where t1.t1f1 > 6 and t1.t1f1 = t2.t2f1 and t2.t2f3 < 'c'
-
从驱动表中查出满足条件的记录,可以全表扫描,或者基于条件列的值建立索引,生成扫描区间
- 基于建立的b+tree结构索引,快速定位到满足条件的第一条记录,避免全扫描
- 查驱动表的sql
select * from t1 where t1.t1f1 > 6
- 定位到第一条数据
-
查到第一条记录后,从
t1.t1f1 = t2.t2f1
知道通过t1.t1f1=7作为关联表t2的条件值,带入到被驱动表select * from t2 where t2.t2f1 = 7 and t2.t2f3 < 'c'
- 被驱动表可以全表扫描,或者基于条件列的值建立索引
- t2表查到记录
- t2查出的数据,结合t1查询的记录,返回给客户端
-
并不是将驱动表满足条件记录全部查出,再去关联被驱动表 ,而是查一条,就到被驱动表中查一次