补充查询处理和查询优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9
二、实现查询操作的算法举例 2. 连接操作的实现
Select * from Student, Sc Where Student.Sno=SC.sno
(1) 嵌套循环方法
对于外层循环(Student)的每个元组(s),检 索内层循环(SC)中的每个元组(sc),并检查这 两个元组在连接属性(sno)上是否相等。如果满 足连接条件,则串接后作为结果输出,直到外 层循环表中的元组处理完为止。
14
为什么要进行查询优化? 例:求选修了2号课程的学生姓名。其SQL语句为:
SELECT 姓名 FROM Student, SC WHERE Student.学号 = SC.学号 AND 课号 = ‘2’;
也可用SQL语言如下实现:
SELECT 姓名 FROM Student WHERE 学号 IN (SELECT 学号 FROM SC WHERE 课号 = ‘2’ ) ;
重复上述步骤直到Student表扫描完。
11
二、实现查询操作的算法举例 (3) 索引连接方法 ①在SC表上建立属性Sno的索引,如果原来没 有的话; ②对Student表中的每一个元组,由Sno的值通 过SC的索引查找相应的SC元组; ③把这些SC元组和Student元组连接起来。
循环执行②、 ③;直到Student表中的元组 处理完为止。
12
二、实现查询操作的算法举例 (4) Hash Join方法 把连接属性作为hash码,用同一个hash函数把 R和S中的元组散列到同一个hash文件中。 划分阶段:对包含较少元组的表(比如R)进行 一遍处理,把它的元组按hash函数分散到hash 表的桶中; 试探阶段:对另一个表(S)进行一遍处理,把S 的元组散列到适当的hash桶中,并将元组与桶 中所有来自R并与之匹配的元组连接起来。
第九章 关系查询处理和查询优化 本章内容:
§1 关系数据库系统的查询处理 §2 关系数据库系统的查询优化 §3 代数优化 §4 物理优化
1
本章要求:
1、了解查询处理的一般步骤 2、了解为什么必须进行查询优化? 3、掌握关系代数的等价变换规则 4、掌握代数优化的算法和优化的一般步骤 5、了解物理优化的内容和方法
2
§1 关系数据库系统的查询处理 查询处理的任务:
将用户提交给RDBMS的查询语句转换为 高效的执行计划(方案)。 一、查询处理步骤
查询处理分为4个阶段,在处理过程中, 一旦发现问题,则报告错误,中止处理。
3
(1) 查询分析 词法分析:识别出语句中的SQL关键字、属
性名、关系名、运算符、常量等语 言符号。 语法分析:检查语句是否符合SQL语法规则。
10
二、实现查询操作的算法举例
(2) 排序-合并方法
①如果连接的表没有排好序,则将Student和SC表按 连接属性Sno排序; ②取Student表中的第一个Sno,依次扫描SC表中具 有相同Sno的元组,把它们连接起来; ③当扫描到Sno不相同的第一个SC元组时,返回 Student表扫描下一个元组,再扫描SC表中具有相同 Sno的元组,把它们连接起来。
8
二、实现查询操作的算法举例
1. 选择操作的实现 (1) 简单的全表扫描方法
对查询基本表顺序扫描,逐一检查每个元组是否 满足选择的条件,对满足条件的元组作为结果输 出。对于小表,简单有效。对于大表,费时。 (2) 索引或散列扫描方法 如果选择条件中的属性上有索引(B+树索引或 Hash索引),可以用索引扫描方法。通过索引先 找到满足条件的元组的主码或元组指针,再通过 元组指针直接在查询的基本表中找到元组。
17
分析三种实现策略的执行时间: 设有1000个学生记录,10000个选课记录,
15
对于一个复杂的查询,不同用户可能会写 出各种不同的查询方法。这些方法有的简单, 有的复杂。它们的执行结果是一样的,但执行 效率可能是不一样的。系统能解决这一问题吗?
16
对这一查询,可以考虑下面几种实现方式: 1、先求Student和SC的笛卡尔积,然后从中选出两学
号字段值相等、课程号为2的元组,再投影姓名。
率较高的方案。 分为两个层次。
6
代数优化:按照一定的规则,改变代数表达 式中关系操作的次序和组合,使 执行效率更高,又称逻辑优化。
物理优化:依据事先确定的策略,选择底层 存取路径和算法。
(4) 查询执行 依据查询优化得到的结果,生成执行代码,
执行之。
7
Βιβλιοθήκη Baidu
二、实现查询操作的算法举例
1. 选择操作的实现 Select * from student where <条件表达式>; 考虑<条件表达式>的几种情况: C1: 无条件; C2: Sno=‘200215121’; C3:Sage>20; C4: Sdept=‘CS’ AND Sage>20;
4
(2) 查询检查 语义检查:根据数据字典,检查语句中的数据库
对象,如属性名、关系名等,是否有 效。 符号名转换:将外部名转换为内部名。 安全性检查:检查用户是否有请求的存取权限。 完整性检查:检查是否违反完整性约束。 查询树转换:用基于关系代数的查询树来表示查 询,查询树也叫语法分析树。
5
(3) 查询优化 从多个可能的执行方案中选择一个执行效
13
§2 关系数据库系统的查询优化
关系数据语言只需用户提出“做什么”,不必指 出“怎么做”,为什么能做到这一点?
一个重要原因就是系统能自动进行查询优化。系 统自动优化比用户自己优化会做得更好,见P267。
在集中式数据库中,查询执行的总代价(开销)为: 总代价 = I/O代价 + CPU代价 + 内存代价 三者中,I/O代价是最主要的。 查询优化的总目标: 选择有效的策略,求得给定的关系表达式的值, 使得查询代价较小。
Q1 = 姓名 ( Student.学号=SC.学号∧课号=‘2’( StudentSC ) ) 2、先做Student和SC的自然连接,然后从中选出课程
号为2的元组,再投影姓名。 Q2 = 姓名(课号=‘2’ (Student ∞ SC)) 3、先从SC中选出课程号为2的元组,然后将该结果与 Student 连接,再投影姓名。 Q3 = 姓名(Student ∞ 课号=‘2’ (SC))
二、实现查询操作的算法举例 2. 连接操作的实现
Select * from Student, Sc Where Student.Sno=SC.sno
(1) 嵌套循环方法
对于外层循环(Student)的每个元组(s),检 索内层循环(SC)中的每个元组(sc),并检查这 两个元组在连接属性(sno)上是否相等。如果满 足连接条件,则串接后作为结果输出,直到外 层循环表中的元组处理完为止。
14
为什么要进行查询优化? 例:求选修了2号课程的学生姓名。其SQL语句为:
SELECT 姓名 FROM Student, SC WHERE Student.学号 = SC.学号 AND 课号 = ‘2’;
也可用SQL语言如下实现:
SELECT 姓名 FROM Student WHERE 学号 IN (SELECT 学号 FROM SC WHERE 课号 = ‘2’ ) ;
重复上述步骤直到Student表扫描完。
11
二、实现查询操作的算法举例 (3) 索引连接方法 ①在SC表上建立属性Sno的索引,如果原来没 有的话; ②对Student表中的每一个元组,由Sno的值通 过SC的索引查找相应的SC元组; ③把这些SC元组和Student元组连接起来。
循环执行②、 ③;直到Student表中的元组 处理完为止。
12
二、实现查询操作的算法举例 (4) Hash Join方法 把连接属性作为hash码,用同一个hash函数把 R和S中的元组散列到同一个hash文件中。 划分阶段:对包含较少元组的表(比如R)进行 一遍处理,把它的元组按hash函数分散到hash 表的桶中; 试探阶段:对另一个表(S)进行一遍处理,把S 的元组散列到适当的hash桶中,并将元组与桶 中所有来自R并与之匹配的元组连接起来。
第九章 关系查询处理和查询优化 本章内容:
§1 关系数据库系统的查询处理 §2 关系数据库系统的查询优化 §3 代数优化 §4 物理优化
1
本章要求:
1、了解查询处理的一般步骤 2、了解为什么必须进行查询优化? 3、掌握关系代数的等价变换规则 4、掌握代数优化的算法和优化的一般步骤 5、了解物理优化的内容和方法
2
§1 关系数据库系统的查询处理 查询处理的任务:
将用户提交给RDBMS的查询语句转换为 高效的执行计划(方案)。 一、查询处理步骤
查询处理分为4个阶段,在处理过程中, 一旦发现问题,则报告错误,中止处理。
3
(1) 查询分析 词法分析:识别出语句中的SQL关键字、属
性名、关系名、运算符、常量等语 言符号。 语法分析:检查语句是否符合SQL语法规则。
10
二、实现查询操作的算法举例
(2) 排序-合并方法
①如果连接的表没有排好序,则将Student和SC表按 连接属性Sno排序; ②取Student表中的第一个Sno,依次扫描SC表中具 有相同Sno的元组,把它们连接起来; ③当扫描到Sno不相同的第一个SC元组时,返回 Student表扫描下一个元组,再扫描SC表中具有相同 Sno的元组,把它们连接起来。
8
二、实现查询操作的算法举例
1. 选择操作的实现 (1) 简单的全表扫描方法
对查询基本表顺序扫描,逐一检查每个元组是否 满足选择的条件,对满足条件的元组作为结果输 出。对于小表,简单有效。对于大表,费时。 (2) 索引或散列扫描方法 如果选择条件中的属性上有索引(B+树索引或 Hash索引),可以用索引扫描方法。通过索引先 找到满足条件的元组的主码或元组指针,再通过 元组指针直接在查询的基本表中找到元组。
17
分析三种实现策略的执行时间: 设有1000个学生记录,10000个选课记录,
15
对于一个复杂的查询,不同用户可能会写 出各种不同的查询方法。这些方法有的简单, 有的复杂。它们的执行结果是一样的,但执行 效率可能是不一样的。系统能解决这一问题吗?
16
对这一查询,可以考虑下面几种实现方式: 1、先求Student和SC的笛卡尔积,然后从中选出两学
号字段值相等、课程号为2的元组,再投影姓名。
率较高的方案。 分为两个层次。
6
代数优化:按照一定的规则,改变代数表达 式中关系操作的次序和组合,使 执行效率更高,又称逻辑优化。
物理优化:依据事先确定的策略,选择底层 存取路径和算法。
(4) 查询执行 依据查询优化得到的结果,生成执行代码,
执行之。
7
Βιβλιοθήκη Baidu
二、实现查询操作的算法举例
1. 选择操作的实现 Select * from student where <条件表达式>; 考虑<条件表达式>的几种情况: C1: 无条件; C2: Sno=‘200215121’; C3:Sage>20; C4: Sdept=‘CS’ AND Sage>20;
4
(2) 查询检查 语义检查:根据数据字典,检查语句中的数据库
对象,如属性名、关系名等,是否有 效。 符号名转换:将外部名转换为内部名。 安全性检查:检查用户是否有请求的存取权限。 完整性检查:检查是否违反完整性约束。 查询树转换:用基于关系代数的查询树来表示查 询,查询树也叫语法分析树。
5
(3) 查询优化 从多个可能的执行方案中选择一个执行效
13
§2 关系数据库系统的查询优化
关系数据语言只需用户提出“做什么”,不必指 出“怎么做”,为什么能做到这一点?
一个重要原因就是系统能自动进行查询优化。系 统自动优化比用户自己优化会做得更好,见P267。
在集中式数据库中,查询执行的总代价(开销)为: 总代价 = I/O代价 + CPU代价 + 内存代价 三者中,I/O代价是最主要的。 查询优化的总目标: 选择有效的策略,求得给定的关系表达式的值, 使得查询代价较小。
Q1 = 姓名 ( Student.学号=SC.学号∧课号=‘2’( StudentSC ) ) 2、先做Student和SC的自然连接,然后从中选出课程
号为2的元组,再投影姓名。 Q2 = 姓名(课号=‘2’ (Student ∞ SC)) 3、先从SC中选出课程号为2的元组,然后将该结果与 Student 连接,再投影姓名。 Q3 = 姓名(Student ∞ 课号=‘2’ (SC))