CMU《数据库系统导论》(2019) by Andy Pavlo Lesson 15 个人笔记

本文介绍了CMU数据库系统课程中的优化方法,包括COSTMODEL评估、全局属性在查询效率估算中的应用、样本表与单表查询优化策略,以及子查询处理技巧。提到Postgres的GEQO和将查询拆分等高级优化技术。
摘要由CSDN通过智能技术生成

CMU《数据库系统导论》(2019) by Andy Pavlo Lesson 15 个人笔记

作者 AlexFisher。

COST MODEL评测方法

全局属性

对表R记录其中元组数Nr,某个列A的不同值的数量记为V(A,R),其中某个列A的每个值对应元组数的平均值记录为SC(A,R) =Nr/V(A,R)
使用这些易于统计的全局属性来估计query的效率,例如平均需要搜索多少个元组才能找到一个目标元组。
劣势:进行了许多理想的假设,例如不同值对应的元组数是相等的。

样本表

拥有一个表的小型副本,让query直接在小型副本上测试查找query的效率。
劣势:时间较差。

应用场景

在表格较小时可以直接使用全局属性,而在表格较大时由于查询时间较长,因此样本表的耗时是可以接受的,故可以使用样本表。

单表查询优化

较简单,通常有三种查询方法:顺序遍历,二分查询(根据聚簇索引),索引查询。
往往聚焦于选择最优的索引来进行查询。对于OLTP来说,查询的选择是sargable的(search argument able),意味着通常存在一个最优的索引来执行一个查询。

三个维度

1.查询树的结构

可以构建多种结构但等价的查询树

2.每个算子的实现方式

例如哈希,merge,nested-loop等。

3.对每个table的查询方式

索引查找,顺序查找。

在这里插入图片描述
像图论一样进行搜索,对每个相同的连接情况取前两者最小的cost。

IBM guys使用”动态编程“来拆分整个问题为更简单的小问题。

postgres在面对12个表及以上的联合查询时会使用GEQO的方法(genetic query optimizer)。

处理子查询

1.重写子查询,将其写为join等方式。

e.g. select * from  where exists(select s.name,r.id from s,r where s.age=r.age)

2.将单个查询拆分成多个查询处理。(例如将一个查询得到的结果存储在一个表中或一个变量中,之后的查询可以直接使用这些表或变量)
附录

最逆天的一集
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值