Study-Hard-数据库连接及实现内部原理(上)
2013-10-17 23:24
309 查看
在操作数据库的时候时常会进行多表的关联,也就是常说的联合查询。联合查询的sql是需要一定优化的,这个过程数据库的查询解析器会帮我们完成一部分,这并不意味着,我们可以书写低质量的sql。在联合查询的时候,涉及到多表的笛卡尔积等概念,而这些sql操作无不是对数据进行筛选、排序等操作,最常见的三种方式分别为:
NestedLoop,嵌套循环
MergeSort,归并排序(这里的归并,不单纯是对一组数据进行归并,进行的是关联归并)
Hash,哈希散列
而我们再做关联操作、分组操作、去重操作时,都是会设计到排序的,我会再下篇中简介常见操作的实现原理,本篇中,主要介绍下,left join、right join、full join以及自连接等操作。
_messageId:Message表的PK
_id:User的Id字段
_message:消息实体
另一张为UserInfo表,表中的字段分别代表:
_id:UserInfo表的主键
_name:用户名
right join:
left join:
以上,是一些关联的简单介绍,因为是示例所以表中只有几条数据,下面来看一个项目中的数据 进行查询的状态,也就是涉及到内外表,排序的方式的一些验证。
NestedLoop,嵌套循环
MergeSort,归并排序(这里的归并,不单纯是对一组数据进行归并,进行的是关联归并)
Hash,哈希散列
而我们再做关联操作、分组操作、去重操作时,都是会设计到排序的,我会再下篇中简介常见操作的实现原理,本篇中,主要介绍下,left join、right join、full join以及自连接等操作。
一、一些简单的关联操作
1.1 数据源
准备了两张表,一张为Message表,表中的字段分别代表:_messageId:Message表的PK
_id:User的Id字段
_message:消息实体
另一张为UserInfo表,表中的字段分别代表:
_id:UserInfo表的主键
_name:用户名
1.2 left join、right join
left join代表做连接,即查询结果以左表为主,也就是当某字段在左表中存在,在右表中不存在时,查询结果将会用空字符占位;right join 也是同样的道理,下面看两个例子right join:
left join:
1.3 full join
full join 是两张表做全表关联,即两张表同时作为基准,以完成关联操作;对比上图的left join、right join 可以较清晰的理解。1.4 自连接
大家肯定都遇到过,需要查询组织层级的时候,这时候,使用自连接会相对方便一些,这里的自连接,可以看做是将自己分别当做两张不同的表,而后进行连接的操作;可以看出ChildParent分别被视为了currentDept以及parentDept。1.5 交叉连接 cross join
交叉连接,是将两个表做笛卡尔积,如下:以上,是一些关联的简单介绍,因为是示例所以表中只有几条数据,下面来看一个项目中的数据 进行查询的状态,也就是涉及到内外表,排序的方式的一些验证。
二、查询中的关联方式
检验sql关联方式的工具叫做Toad,在网上可以免费下载,有my sql 、 oracle 、 sql server 等各种版本。下载地址http://www.toadworld.com/m/freeware/default.aspx?Redirected=true2.1 NestedLoop嵌套循环
2.2 Hash散列关联
2.3 Merge 归并关联
以上就是查询时的常见关联形式,对于关联形式的理解,有助于我们理解数据库调优、sql调优的一些本质性原理。三、参考资料
相关文章推荐
- Study-Hard-数据库连接及实现内部原理(下)
- SQL Server连接VFP数据库的实现
- 深入解析Spring架构与设计原理-数据库的操作实现
- 如何实现android和服务器长连接呢?推送消息的原理
- SDWebImage的内部实现原理
- jsp实现连接数据库、查询、插入、修改功能的javaBean代码
- WebSocket 是什么原理?为什么可以实现持久连接?
- javascript实现连接数据库
- Key-Value小数据库tmdb发布:原理和实现 .
- MVC实现模型优先编码之连接数据库
- 简单调用VS自带的数据源选择对话框实现数据库连接字符串配置
- 02-php雇员管理系统-实现登录(连接数据库)
- 如何实现android和服务器长连接呢?推送消息的原理
- MyBatis原理第四篇——statementHandler对象(sqlSession内部核心实现,插件的基础)
- Srtuts2实现登录界面(不连接数据库)报错(二)
- WebSocket 是什么原理?为什么可以实现持久连接?
- DSHOW 中关于FILTER的连接内部实现过程
- jsp连接数据库实现用户登录功能
- 单列数据库索引的实现原理
- 从SQL Server向Oracle迁移的技术实现方案(十)连接远程的数据库(包括不同服务器)