left join(左连接):join 查询在有索引条件下:
right join(右连接):
- 返回包罗左表中的所有记载和右表中联结字段相等的记载
- 左表是驱动表,右表是被驱动表
innner join(等值连接):
- 返回包罗右表中的所有记载和左表中联结字段相等的记载
- 右表是驱动表,左表是被驱动表
- 只返回两个表中联结字段相等的行
- 数据量比较小的表作为驱动表,大表作为被驱动表
Join 原理:
以是在以小表驱动大表的情况下,给大表建立索引会大大提高查询效率
- 驱动表有索引不会使用到索引
- 被驱动表建立索引会使用到索引、
Simple Nested-Loop:
Index Nested-Loop:
- 驱动表中的每一条记载与被驱动表中的记载进行比较判断(笛卡尔积)
- 对于两表联结来说,驱动表只会被访问一遍,但驱动表却要被访问到好多遍
Block Nested-Loop:
- 基于索引进行连接的算法
- 他要求被动表驱动表上有索引,可以通过索引来加速查询
选择 Join 算法优先级:
- 它使用 Join Buffer 来减少内部循环读取表的次数
- Join Buffer 用以缓存联接需要的列
当不使用 Index Nested-Loop Join 的时候,默认使用 Block Nested-Loop Join
- Index Nested-LoopJoin > Block Nested-Loop Join > Simple Nested-Loop Join
延迟关联:事务
书签方式:
- 通过 where 条件提取出主键,再将该表与原数据表关联,通过主键 id 提取数据行,而不是通过原来的二级索引提取数据行
复制代码
- select a.* from table a,
- (
- select id from table
- where type = 2
- and level =9
- order by id asc
- limit 190289,10
- ) b
- where a.id = b.id;
- 找到 limit 第一个参数对应的主键值, 在根据这个主键值再去过滤并 limit
复制代码
- select * from table
- where
- id > (
- select * from table
- where type = 2
- and level = 9
- order by id asc
- limit 190289, 1
- )
- limit 10;
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |