有个做数据库的同学,平时会和他聊一下,知道原理了才会更好用数据库
关于连接的实现方法
l嵌套循环法(NESTED-LOOP)
1、首先在表
1
中找到第一个元组,然后从头开始扫描表
2
,逐一查找满足连接条件的元组,找到后就将表
1
中的第一个元组与该元组拼接起来,形成结果表中一个元组。
2、表
2
全部查找完后,再找表
1
中第二个元组,然后再从头开始扫描表
2
,逐一查找满足连接条件的元组,找到后就将表
1
中的第二个元组与该元组拼接起来,形成结果表中一个元组。
3、重复上述操作,直到表
1
中的全部元组都处理完毕
所以一般连接的时候最好把大表放在前面,毕竟是一个基础表,小表放后面
l排序合并法(SORT-MERGE)
1、首先按连接属性对表
1
和表
2
排序
2、对表
1
的第一个元组,从头开始扫描表
2
,顺序查找满足连接条件的元组,找到后就将表
1
中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表
2
中第一条大于表
1
连接字段值的元组时,对表
2
的查询不再继续
3、找到表
1
的第二条元组,然后从刚才的中断点处继续顺序扫描表
2
,查找满足连接条件的元组,找到后就将表
1
中的第一个元组与该元组拼接起来,形成结果表中一个元组。直接遇到表
2
中大于表
1
连接字段值的元组时,对表
2
的查询不再继续
4、重复上述操作,直到表
1
或表
2
中的全部元组都处理完毕为止
l索引连接(INDEX-JOIN)
1、
对表
2
按连接字段建立索引
2、对表
1
中的每个元组,依次根据其连接字段值查询表
2
的索引,从中找到满足条件的元组,找到后就将表
1
中的一个元组与该元组拼接起来,形成结果表中一个元组
所以一般连接的时候最好把大表放在前面,毕竟是一个基础表,小表放后面
union 和union all区别
两个都是并操作,union会去除重复元素,union all不会