数据库连接操作的实现、代价估算以及优化

目录

简单的全表扫描方法

具体步骤

全表扫描算法的代价估算公式

嵌套循环方法(nested loop)

具体步骤

代价估算 :分为三种情况

第一种情况:Q1=πSname (σStudent.Sno=SC.Sno∧Sc.Cno='2' Student×SC))

第二种情况:Q2=πSname (σSc.Cno='2' (Student SC)

第三种情况 Q3=πSname (Student σSc.Cno='2'(SC))

嵌套循环连接算法的代价估算公式

排序-合并方法(sort-merge join 或merge join)

具体步骤

排序-合并连接算法的代价估算公式

索引连接(index join)方法

具体步骤

索引扫描算法的代价估算公式

选择条件是码=值,则采用该表的主索引

如果选择条件涉及非码属性

比较条件是>,>= ,<,<=操作

Hash Join方法

 具体步骤


选择操作典型实现方法:

  1. 嵌套循环方法(nested loop)
  2. 排序-合并方法(sort-merge join 或merge join)
  3. 索引连接(index join)方法
  4. Hash Join方法

集中式数据库执行开销主要包括:

  • 磁盘存取块数(I/O代价)
  • 处理机时间(CPU代价)
  • 查询的内存开销

I/O代价是最主要的

分布式数据库:总代价=I/O代价+CPU代价+内存代价+通信代价

简单的全表扫描方法

具体步骤

  • 对查询的基本表顺序扫描,逐一检查每个元组是否满足 选择条件,把满足条件的元组作为结果输出
  • 适合小表,不适合大表

全表扫描算法的代价估算公式

  • 如果基本表大小为B块,全表扫描算法的代价 cost=B
  • 如果选择条件是码=值,那么平均搜索代价 cost=B/2

嵌套循环方法(nested loop)

具体步骤

  1. 对外层循环(Student)的每一个元组(s),检索内层循环 (SC)中的每一个元组(sc)
  2. 检查这两个元组在连接属性(sno)上是否相等
  3. 如果满足连接条件,则串接后作为结果输出,直到外 层循环表中的元组处理完为止

代价估算 :分为三种情况

第一种情况:Q1=πSname (σStudent.Sno=SC.Sno∧Sc.Cno='2' Student×SC))

1. 计算广义笛卡尔积

把Student和SC的每个元组连接起来的做法:

  • 在内存中尽可能多地装入某个表(如Student表)的若干块,留出一块 存放另一个表(如SC表)的元组。
  • 把SC中的每个元组和Student中每个元组连接,连接后的元组装满 一块后就写到中间文件上
  • 从SC中读入一块和内存中的Student元组连接,直到SC表处理完。
  • 再读入若干块Student元组,读入一块SC元组
  • 重复上述处理过程,直到把Student表处理完

设一个块能装10个Student元组或100个SC元组,在内存 中存放5块Student元组和1块SC元组,则读取总块数为 1000/10+(1000/50) * (10000/100) =100+20×100=2100块

其中,读Student表100块。读SC表20遍,每遍100块。 若每秒读写20块,则总计要花10^5s

连接后的元组数为10^3×10^4=10^7 。设每块能装10个元组, 则写出这些块要用10^6/20=5×10^4s

2. 作选择操作

  • 依次读入连接后的元组,按照选择条件选取满足要求 的记录
  • 假定内存处理时间忽略。读取中间文件花费的时间(同 写中间文件一样)需5×10^4s
  • 满足条件的元组假设仅50个,均可放在内存

3. 作投影操作

  • 把第2步的结果在Sname上作投影输出,得到最终结果
  • 第一种情况下执行查询的总时间≈10^5
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰原Anita_Hailey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值