《数据库系统》第九章 关系查询处理和查询优化
本章重点
- 查询处理的4个步骤(简答题)👉每条要会1-2句的解释
- 查询优化的步骤(5步)
- 会画关系代数的语法树
- 启发式规则
关系数据库系统的查询处理
4个步骤:查询分析、查询检查、查询优化和查询执行
- 查询分析:对查询语句进行扫描、词法分析和语法分析
- 查询检查:一是进行语义检查,二是对用户的存取权限进行检查,三是把SQL查询语句转换成内部表示,四是使用查询树,五是把数据库对象的外部名称转换为内部表示
- 查询优化:选择一个高校执行的查询处理策略。按照优化的层次一般可将查询优化分为代数优化和物理优化。(代数优化:对代数表达式;物理优化:对硬件相关)选择的依据可以基于规则(启发式规则)、基于代价、基于语义(剪枝)
- 查询执行:由代码生成器生成执行代码
实现查询操作的算法示例
选择操作的实现
- 简单的全表扫描
- 索引扫描算法(索引并非越多越好:开销增大;Index Rebuild)
补充:hash索引:适合精确定位,但不适合范围查询、模糊查询
连接操作的实现
- 嵌套循环算法
- 排序-合并算法(花销主要在排序上)
- 索引连接算法
- hash join算法
关系数据库系统的查询优化
注:期末未涉及
e.g.
Q
1
=
Π
S
n
a
m
e
(
σ
S
t
u
d
e
n
t
.
S
n
o
=
S
C
.
S
n
o
∧
S
C
.
C
n
o
=
′
2
′
(
S
t
u
d
e
n
t
×
S
C
)
)
Q_1=\Pi _{Sname}(\sigma_{Student.Sno=SC.Sno\wedge SC.Cno='2'}(Student×SC))
Q1?=ΠSname?(σStudent.Sno=SC.Sno∧SC.Cno=′2′?(Student×SC))
Q
2
=
Π
S
n
a
m
e
(
σ
S
C
.
C
n
o
=
′
2
′
(
S
t
u
d
e
n
t
?
S
C
)
)
Q_2=\Pi_{Sname}(\sigma_{SC.Cno='2'}(Student\Join SC))
Q2?=ΠSname?(σSC.Cno=′2′?(Student?SC))
Q
3
=
Π
S
n
a
m
e
(
S
t
u
d
e
n
t
?
σ
S
C
.
C
n
o
=
′
2
′
(
S
C
)
)
Q_3=\Pi_{Sname}(Student\Join\sigma_{SC.Cno='2'}(SC))
Q3?=ΠSname?(Student?σSC.Cno=′2′?(SC))
对于第一种情况,设一个块能装10个Student元组或100个SC元组,在内存中存放5块Student元组和1块SC元组,则读取总块数为
1000 10 + 1000 10 × 5 × 10000 100 = 100 + 20 × 100 = 2100 块 \frac{1000}{10}+\frac{1000}{10×5}×\frac{10000}{100}=100+20×100=2100块 101000?+10×51000?×10010000?=100+20×100=2100块
其中, 1000 10 \frac{1000}{10} 101000?表示读Student的次数, 1000 10 × 5 \frac{1000}{10×5} 10×51000?表示一次读5块,每块10个,决定SC表需要多少个重装的轮回, 10000 100 \frac{10000}{100} 10010000?表示学生表不动的时候,SC重装的块数。
可以通过优化提高效率。
代数优化
要求:理解;会用;规则要背过
关系代数表达式等价变换规则
-
连接、笛卡尔积的交换律
-
连接、笛卡尔积的结合律
-
投影的串接定律
-
选择的串接定律
-
选择与投影操作的交换律
-
选择与笛卡尔积的交换律
-
选择与并的分配律
-
选择与差运算的分配律
-
选择对自然连接的分配律
-
投影与笛卡尔积的分配律
-
投影与并的分配律
查询树的启发式优化
典型的启发式规则有:
- 选择运算尽可能先做
- 把投影运算和选择运算同时进行
- 把投影同其前或后的双目运算结合起来
- 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算
- 找出公共子表达式
语法树(考试要会画)
- 只能用五种基本运算:选择、投影、并、差、笛卡尔积
- 从下往上
物理优化
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!