Query Processing
层次网状关系模型
基于层次网状关系模型的是非关系数据库
基于关系模型是关系型数据库
对于非关系型数据库没有sql标准
操作非关系型数据库跟你过程编程差不多
所以在非关系型数据下你的性能只跟你的程序有关
那关系型数据库后台是怎么处理你的sql的呢?
查询过程
什么是查询过程:dbms用什么样的方式处理你的sql语句的呢,如何解析和执行你的sql并返回你想要的结果的呢?
如何更好的优化呢?
查询优化
什么是查询优化:你提交的那么高级的语句,后台怎么选择一个更好的更快的方式执行呢?就算结果都一样?
查询执行过程
分解
分析
语法:对不对 词法问题:有没有这个东西 数据类型问题:这个东西的类型是不是匹配、是不是能够比较
转换
把你的高级语言转换为我能认的东西 把你提交的东西转化为我底层能理解的8种运算 (把你的sql转换成一个语法树)
优化
优化的方式:--启发式规则(选择先做:让语法树中的选择下沉) --基于代价的评估
- 执行
关于关系代数的转换规则
- 选择的合取律
- 选择的交换律
- 投影的啥啥律
- 选择和投影是可交换的
- 连接具有交换律,笛卡尔积具有交换律
- 选择和连接是可交换的
dbms将这几个律写在后侧,其目的是让选择先做,但是前提是能先做,也就是符合这些规律
期末考试不考具体的转换(考研会考)启发式规则
- 选择尽可能先做
- 用 连接 代替 笛卡尔积加选择
- 选择尽可能在叶节点上
- 投影尽可能先做
- 通用的表达尽可能少做,合并成一次做
基于代价的评估
会考关于查询优化概念,关于事务的概念,不会评判可串行性,也不会考你语法树