数据库系统笔记8:查询过程

逻辑查询计划

Parsing 解析

将SQL解析成解析树

转换为关系代数表达式

改进关系代数表达式

改进原来的关系代数,使得结果相同,但代价变低

改进规则

  •  自然连接、笛卡尔积、并满足交换律、结合律

C:R和S中相同的属性

L:去掉R和S笛卡尔积后重复的列

 其中,p条件只与R有关,q条件只与S有关

物理查询计划

中间代价估算

有利于决定后续如何从物理上查询

查询方法

  • 基于排序的方法
  • 基于哈希的方法
  • 基于索引的方法

不同代价的扫描方式

  • one-pass 扫一遍
  • two-pss 扫两遍(一个存不下)
  • multi-pass 扫很多遍

主要估算磁盘I/O代价:扫描多少块

  • M:预计能存多少磁盘块
  • T(R):R中的元组数量
  • B(R):存储R中的元组需要的块数量
  • V(R,A):R中A属性的值去重后的数量

注意,我们只能估算,不能得出准确值

基于索引的查询

  • 非聚簇存储:\frac{T(R)}{V(R,A)},特别地,当A是主键时,代价为1
  • 聚簇存储:\frac{B(R)}{V(R,A)}

natural join

R与S自然连接:将小表S存入内存,把大表R的内容一块一块读进内存,找到能够自然连接的元组,因此将R和S表各扫一遍即可,其代价为B(R)+B(S)

nested-loop join

改进

  • 将小表S中的M-1块存入内存
  • 把大表R的内容一块一块读进内存
  • 对于R表中的每个块,找到能够自然连接的元组
  • 其代价为B(S)(1+\frac{B(R)}{M-1})\approx \frac{B(S)B(R)}{M}

基于排序的自然连接:归并排序

  • 分别读入数据块,对其进行排序,得到几个排好序的子表
  • 将子表按照其最小元素排序的顺序读入子表,合并后输出
  • 读取两表中最小的数据块,比较相同属性的取值,找到相同取值x,把两表中该属性取值为x的元组都读入内存,并进行连接
  • 其代价为5(B(R)+B(S))
  • 但该算法有限制,B(R)+B(S)\leq \leq M^{2}

选择最好的物理查询计划

关系代数具体到物理层面应该如何执行?需要考虑有无索引、磁盘内数据如何存储等

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值