PostgreSQL fourth class

tuple:
定长
不定长
page 包含 header、record(tuples 以bytes 形式存入)、free space
tuple 包含 tuple header(包含 tuple里面每个attribute 的 offset)、columns

几种数据类型:
Date
Float
Integer
Number: int[]
varchar: char[]
找tuple 里面的 attribute 先读 header 然后一个一个读取

Cost models
Time cost
Page cost: number of pages read or written
如果 page in buffer => no cost
file:

btree, gist, gin, hash. heap, sorted file structures

heap file (unsorted file): 只要page有空余空间 就插入一个tuple
最好情况: 第一位就是空的
page cost 1 读了一个 + 1 写入一个 + 1 write header page
最坏情况:
b 读了b 个pages + 1 写 + 1 write header page

sorted file: tuples arranged in file in key order
worst case:
sorted: log2 b + 1 + 1 write header page

hash file: tuples placed in pages using hash function
hash key: for example hash key = 10
1 % 10 = 1
2 % 10 = 2
select * from R where k = 51
去第一页里面寻找
page cost = 1 + b(over pages)

select * from R where k > 50
通常 > 或者 < 是不走index的 因为所有页都需要遍历
就直接扫描了

scan tuple 不能用 for loop 形式
iterator 实现 tuple next_tuple(scan s)
用上一个tuple 指针 对应到 下一个tuple 指针的形式
不是 想要 tuple 5 就直接调用 tuple[5]

copy relation from s to t

old day:
从relation s 里面 一个一个page copy 到 relation t
page cost: #pages read + #pages written

right now:
copy file s tp file t
简单粗暴

Data file => file block => page

merge sort 归并排序

2-way merge sort
disk 1 -> disk 2
disk 1 里面 存入 page 1 and page 2
如果 page 1 里面 都比 page 2 小
存入 output buffer 最终 进入 disk 2
2 路归并排序 需要 3 个 buffer

n-way merge sort

all data fits into memory, sort using qsort()
直接在内存里面排序

projection page cost:
b read -> select 先select 读取所有pages + b t 想要的两列放入临时的tmp里面 + 2.bT.ceil(lognb0) 排序 + b t 去重复 + b out 去重后最终输出的page数目

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值