查询处理是关系数据库管理系统的核心,查询优化技术是查询处理的关键技术
本章主要内容
查询处理过程 查询分析 查询检查 查询优化 查询执行
查询优化 代数优化 启发式代数优化 物理优化 基于规则的存取路径优化 基于代价的优化
查询执行 自顶向下执行方式 自底向上执行方式
选择操作典型实现方法:
(1) 全表扫描方法 (Table Scan) 对查询的基本表顺序扫描,逐一检查每个元组是否满足选择条件,把满足条件的元组作为结果输出 适合小表,不适合大表
(2)索引扫描方法 (Index Scan) 适合于选择条件中的属性上有索引(例如B+树索引或Hash索引) 通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组
连接操作的实现:
(1)嵌套循环算法(nested loop join)
(2)排序-合并算法(sort-merge join 或merge join)
(3)索引连接(index join)算法
(4)Hash Join算法
比较复杂的查询,尤其是涉及连接和嵌套的查询
不要把优化的任务全部放在关系数据库管理系统上
应该找出关系数据库管理系统的优化规律,以写出适合关系数据库管理系统自动优化的SQL语句
对于关系数据库管理系统不能优化的查询需要重写查询语句,进行手工调整以优化性能
关系系统的查询优化
是关系数据库管理系统实现的关键技术又是关系系统的优点所在
减轻了用户选择存取路径的负担
代数优化策略:通过对关系代数表达式的等价变换来提高查询效率
关系代数表达式的等价:指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的
两个关系表达式E1和E2是等价的,可记为E1≡E2
代数优化改变查询语句中操作的次序和组合,不涉及底层的存取路径
对于一个查询语句有许多存取方案,它们的执行效率不同, 仅仅进行代数优化是不够的
物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划
1.选择操作的启发式规则
对于小关系,使用全表顺序扫描,即使选择列上有索引 对于大关系,启发式规则有:
(1)对于选择条件是“主码=值”的查询
查询结果最多是一个元组,可以选择主码索引
一般的关系数据库管理系统会自动建立主码索引
(2)对于选择条件是“非主属性=值”的查询,并且选择列上有索引
要估算查询结果的元组数目
如果比例较小(<10%)可以使用索引扫描方法
否则还是使用全表顺序扫描
(3)对于选择条件是属性上的非等值查询或者范围查询,并且选择列上有索引
要估算查询结果的元组数目
如果比例较小(<10%)可以使用索引扫描方法
否则还是使用全表顺序扫描
习题:一个具有如下关系的图书馆数据库: 书目关系:Boo(Ti,Au,Pn,Nc) 出版社关系:Pub(Pn,Pa,Pc) 借阅者关系:Bor(Na,Ad,Ci,Cn) 借阅登记关系:Loa(Cn,Nc,Da). 关系属性的意义如下: Ti书名 Au作者 Pn出版社名 Nc图书编号 Pa出版社的市内地址 Pc出版社所在城市 Na借阅者姓名 Ad借阅者市内地址 Ci借阅者所在城市 Cn借书证号码 Da借阅日期 设有一个由已借出书的信息构成的视图LBI,其SQL 定义如下:
CREATE VIEW LBI AS SELECT
Ti,Au,Boo,Pn,Boo.Nc,Na,Ad,Ci,Bor.Cn,Da FROM Boo,Bor,Loa
WHERE Boo.Nc=Loa.Nc AND
Bor.Cn=Loa.Cn.
查询15年11月1日前借出的所有书籍的名字。
SQL定义:SELECT Ti
FROM LBI
WHERE Da<11/1/2015.