加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱资讯网 (https://www.52junxun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

好书一起读(167):重学数据库之查询

发布时间:2022-11-21 11:10:21 所属栏目:MySql教程 来源:
导读:  读《数据库系统实现》来巩固数据库基础。

  数据库三大要点:持久,查询,事务。这篇说查询。

  查询的话题对应的是书的第67两章。查询处理的本质是查询进、数据出。又分为两个阶段,一是编译阶段,
  读《数据库系统实现》来巩固数据库基础。
 
  数据库三大要点:持久,查询,事务。这篇说查询。
 
  查询的话题对应的是书的第67两章。查询处理的本质是查询进、数据出。又分为两个阶段,一是编译阶段,查询进、物理计划出,二是执行阶段,物理计划进,数据出。
 
  编译阶段的查询进、物理计划出,又分为三个步骤,一是分析,查询进、语法树出,二是查询重写,语法树进、逻辑树出,三是物理计划生成,逻辑树进、物理计划出。
 
  这是典型的编译过程,三个步骤可以分别看做语法分析、优化和目标代码生成,生成的「目标代码」就是可以被执行的物理计划。
 
  执行阶段将执行使用关系代数表达的查询。关系代数操作符包括并交差、选择、投影、乘积、连接、消除重复、分组和排序。SQL中的关系是包,同样的元组可以在一个关系中多次出现。
 
  写在后面:
 
  查询的过程,先将高级语言SQL编写的查询语句编译成能被执行的目标代码——即物理计划,再执行这个物理计划以达到目的。先编译,再执行,非常容易理解。
 
  查询的特殊之处在于它要处理的数据的格式是装着元组的集合,这使得物理计划本身一定是一系列对集合的操作的序列。这些操作,对应的就是关系代数的操作符。
 
  SQL语言编写的查询语句,是用高级语言的方式定义这些操作,所以当我们看到关系代数操作符如选择、投影等等,很容易想到它们在SQL中的表示方法。
 
  数据库的表,给我们的直观感受是其形式是二维表,但如果总是记得其实质是装着若干元组的集合,每个步骤的实质都是输入一(或多)个集合,输出另一个集合,对SQL的执行的理解就会很容易理解。
 
  比如一个集合包括(张三,男)和(李四,男)两个元组,对之施加where name = '张三'的操作,得到一个新集合,包括(张三,男)一个元组,这就是选择。
 
  比如一个集合包括(张三,男)和(李四,男)两个元组,对之施加select name的操作,得到一个新集合,包括(张三)和(李四)两个元组,这就是投影。
 
  SQL的本质是一个过程,施加在数据之上,获得另一种形式的数据。
 
  Java的MyBatis框架,本质是声明一个方法(Java中的过程),方法签名由Java编写,方法体由SQL编写,达到两种编程模型(对象和关系)的融合的目的。
 
  Hibernate做的是同样的事,让类和表,对象和记录融合,以达到在程序中只要操作对象,就能自动转化为操作记录的目的。这就是ORM。
 
  你在Java语言里声明一个List
 
  ,实际就是声明了一个装着元组的集合,可以对它进行选择、投影的操作,代码很好写,有了Java8后更加好写。
 
  数据库所做的,只是把这个List放到了另一台服务器上,但容量更大数据库查询操作,能断电存储,操作起来更方便。无论是NoSQL还是缓存容器,也都是如此,建一个单独的服务器,来存放各种装着数据的集合。
 
  状态外部化了之后,程序就可以专注于行为,当程序需要访问容器时,通过方便的接口访问即可。这也是一种解耦合,解的是状态和行为的耦合。
 

(编辑:我爱资讯网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!