欢迎来到天天文库
浏览记录
ID:26985433
大小:300.01 KB
页数:40页
时间:2018-11-30
《《查询处理和优化》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章查询处理和优化5.1引言5.2代数优化5.3依赖于存取路径的规则优化5.4代价估算优化*5.1引言概述查询是数据库系统中最基本、最常见和最复杂的操作。对数据库的查询一般都是以查询语言(如SQL)表示。从查询请求出发,直到得到查询结果,这一过程称为查询处理。关系数据库系统的查询语言一般是“非过程语言”,它减轻了用户选择存取路径的负担。用户只要提出‘干什么’,不必指出‘怎么干’。即用户不必关心查询的具体执行过程,而由DBMS确定合理的、有效的执行策略。DBMS在这方面的作用称为查询优化。对于使用非过程
2、查询语言的RDBMS,查询优化是查询处理中非常重要的一环,对系统性能会产生很大的影响。5.1引言2.查询处理的一般过程先做词法和语法分析,把查询语句变成语法树或语法图;然后进行查询优化,形成执行计划,生成可执行代码,交系统执行。具体处理过程也可分为解释和编译两种实现方式。解释方式如图6-1所示。编译方式如图6-2所示。对于常用的例行事务,编译方式可以显著地提高数据库性能。对于那些不怎么重复使用的偶然查询,解释也不失为一种简单、实用的实现方式。这两种实现方式在现有的商用DBMS中都有应用。5.1引言3.例
3、子首先看一个简单的例子,说明为什么要进行查询优化。例:求选修了2号课程的学生姓名。用SQL语言表达:SELECTSnameFROMS,SCWHERES.SNO=SC.SNOANDSC.CNO='2';假定学生-课程数据库中有l000个学生记录,l0000个选课记录,其中选修2号课程的选课记录为50个。系统可以用多种等价的关系代数表达式来完成这一查询1.Q1=πSname(σS.sno=sc.sno∧sc.cno='2'(S×SC))2.Q2=πSname(σsc.cno='2'(S
4、><
5、SC))
6、3.Q3=πSname(S
7、><
8、σsc.cno='2'(SC))我们将看到由于查询执行的策略不同,查询时间相差很大。5.1引言查询执行策略Q1代价分析计算广义笛卡尔积的代价把S和SC的每个元组连接起来。一般连接的做法是:在内存中尽可能多地装人某个表(如Student表)的若干块元组,留出一块存放另一个表(如SC表)的元组。然后把SC中的每个元组和S中每个元组连接,连接后的元组装满一块后就写到中间文件上,再从SC中读入一块和内存中的S元组连接,直到SC表处理完。这时再一次读入若干块S元组,读入一块SC元
9、组,重复上述处理过程,直到把S表处理完。设一个块能装l0个Student元组或l00个SC元组,在内存中存放5块Student元组和l块SC元组,则读取总块数为:1000/10+1000/(10×5)×(10000/100)=2100块其中读Student表l00块。读SC表20遍,每遍l00块。若每秒读写20块,则总计要花105(秒)。连接后的元组数为1000×10000。设每块能装l0个元组,则写出这些块要花1000000/20=50000(秒)。5.1引言查询执行策略Q1代价分析(续)选择操作的代
10、价依次读入连接后的元组,按照选择条件选取满足要求的的记录。假定内存处理时间忽略。这一步读取中间文件花费的时间(同写中间文件一样)需50000秒。满足条件的元组假设仅50个,均可放在内存。3)投影操作的代价把第2步的结果在Sname上作投影输出,得到最终结果。因此第一种情况下执行查询的总时间约为105+2×5×10000秒。这里,所有内存处理时间均忽略不计。5.1引言查询执行策略Q2代价分析计算自然连接的代价为了执行自然连接,读取Student和SC表的策略不变,总的读取块数仍为2100块,花费l05秒。
11、但自然连接的结果比第一种情况大大减少,为10000个。因此写出这些元组时间为10000/10/20=50秒。仅为第一种情况的千分之一。读取中间文件块,执行选择运算,花费时间也为50秒。将第2步结果投影输出。因此,第二种情况总的执行时间≈105+50+50=205秒。5.1引言查询执行策略Q3代价分析先对SC表作选择运算,只需读一遍SC表,存取l00块花费时间为5秒,因为满足条件的元组仅50个,不必使用中间文件。读取STUDENT表,把读入的STUDENT元组和内存中的SC元组作连接。也只需读一遍STUD
12、ENT表共l00块花费时间为5秒。把连接结果投影输出。第三种情况总的执行时间≈5+5=10秒。5.1引言假如SC表的Cno字段上有索引,第l步就不必读取所有的SC元组而只需读取CNO=‘2’的那些元组(50个)。存取的索引块和SC中满足条件的数据块大约总共3~4块。若STUDENT表在Sno上也有索引,则第2步也不必读取所有的STUDENT元组,因为满足条件的SC记录仅50个,涉及最多50个STUDENT记录,因此读取STUDENT表的块数
此文档下载收益归作者所有