关系查询处理和查询优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Optimizer Execution plan
D
B
M S
data
Statistics about data
关系系统的查询优化:
为什么需要查询优化
关系系统的查询优化由系统完成, 而不是 由用户完成
优化器可以数据字典获取许多统计信息 如果数据库的物理统计信息改变了,优化器
可以对查询进行重新优化以选择适应的执行 计划 优化器可以考虑数百种不同的执行计划 优化器包括了许多复杂的技术
连接后的元组个数为: 103 104=107 连接后的中间结果内存放不下, 需暂时写到外存 若每块可装10个元组, 则写出这些元组需:
(107 /10)/20=5 104s
➢ 选择操作: 读回需5 104s, 选择后剩50个元 组, 假定均可放在内存
➢ 投影操作: ➢ 查询共花费: 105+2 5 104 105 s
关系系统的查询优化:
一个查询实例: 求选修2号课程的学生姓名
SQL表示: select Sname from Students, SC where Students.Sno=SC.Sno and Cno=‘2’; 关系代数表示: Q1= ( sname Students.Sno=SC.Sno and Cno=‘2’(StudentsSC)) Q2= sname(Cno=‘2’(Students SC)) Q3= sname( Students Cno=‘2’(SC))
(104 /10)/20=50s
Q2= sname(Cno=‘2’(Students SC)) Q3= sname( Students Cno=‘2’(SC))
➢ 读取自然连接结果, 执行选择运算, 需50s, 选择结 果均可放在内存
➢ 投影运算: ➢ 总花费为: 105+50+50=205s
ຫໍສະໝຸດ Baidu Q3代价计算(仅考虑I/O代价)
Q2= sname(Cno=‘2’(Students SC))
Q2代价计算(仅考虑I/O代价)
➢ 计算自然连接代价 也要把数据读到内存进行连接, 但连接结果比笛
卡尔积要小得多 读取块数依然为:
1000 1000 10000 100 20100 2100 10 10 5 100
花费为2100/20105s 连接结果大小为104个元组, 写到外存需:
Q1= sname(Students.Sno=SC.Sno and Cno=‘2’(StudentsSC))
代价计算 Q1代价计算(仅考虑I/O代价) ➢ 计算广义笛卡尔积代价
假定: 在内存中, 存放5块Students元组和一 块SC元组, 一块可以装10个Students元组或 100个SC元组.
优化目标: 寻求最优的执行计划, 使查询 执行开销尽量小
关系系统的查询优化:
查询优化的一般步骤
将查询转化成内部表示--语法树 根据等价变化规则, 将语法树转化成优化形
式 选择低层操作算法 生成查询计划
查询执行开销主要包括: 总代价=I/O代价+CPU代价
多用户数据库执行开销: 总代价=I/O代价+CPU代价+内存代价
➢ 计算对SC做选择运算的代价 需读SC到内存进行选择运算 读SC块数为: 10000/100=100 花费为: 100/20=5s 选择结果为50个SC元组, 均可放在内存
Q3= sname( Students Cno=‘2’(SC))
➢ 计算和Students自然连接的
代价
需读Students到内存进行连
选择运算尽可能先做, 降低中间结果大小
在连接前,对关系适当的进行预处理: 对关
系排序(排序合并连接方法)或在连接属性上
建索引(索引连接方法)
循环嵌套连接(不 Students
做任何预处理):
95004…
95002...
95003... ...
95001…
...
SC
95003 1 … 95003 2 … 95004 2 ... 95004 3 ... 95001 1 … ...
读取总块数:
Students 10
SC 100
1000 1000 10000 100 20100 2100 10 10 5 100
若每秒读写20块, 则花费:
2100 105s 20
Q1= sname(Students.Sno=SC.Sno and Cno=‘2’(StudentsSC))
关系系统的定义
关系系统: 支持关系数据模型的数据库管 理系统(粗略)
关系系统(确切定义): 一个系统可以定义 为一个关系系统, 当且仅当它:
支持关系数据库 支持选择、投影和连接运算(自然连接), 对这
些运算不要求定义任何物理存取路径
关系系统的分类:
关系系统的产品 按E.F.Codd的思想将关系系统分为:
假定: Students有1000个元组,SC有10000 个元组, 其中选2号课程的有50个元组
数据只有读到内存才能进行连接
Q1= sname(Students.Sno=SC.Sno and Cno=‘2’(StudentsSC))
通过读取块数计算I/O代价 读取块数计算方法: Students 1000个元组 5块 SC 10000个元组
关系系统的查询优化:
排序合并连接(连 接的关系分别排 序):
Students
95001… 95002...
95003...
95004…
...
接运算
5块
读Students块数为:
Students 10
SC 50
1000/10=100
花费为: 100/20=5s
连接结果为50个元组, 均可放在内存
➢ 投影运算:
➢ 总花费: 5+5=10s
关系系统的查询优化:
查询优化的一般准则: 下面的优化策略一般 能提高查询效率, 但不一定是最优的
SM I a
SM I b
表式系统(a) 最小关系系统(b) 关系完备的系统(c) 全关系系统(d)
SM I c
SM I
d
关系系统的查询处理:
查询处理的步骤:
query
Parser & translator
Relational algebra expression
Query output
Evaluation engine