学院 计算机学院/软件学院
实 验 报 告
专业 软件工程 班级 软件2班 焕荣 学号 2 课程名称 数据库原理与设计
学年2016—2017 学期 1□/ 2? 课程类别 专业必修? 限选□ 任选□ 实践□
评分: 批阅老师: 2017年 月 日
实验七 查询优化
实验目的?了解DBMS对查询优化的处理过程。
2.?增强查询优化的实践能力。?
3.?进一步提高编写复杂查询的SQL脚本的能力。
4.?巩固和加深理解查询相关理论。
实验容
针对数据库ShiYan,完成以下查询优化操作。?
(1)查询P表中各零件编号、名称及重量按86%计算后的信息,其中重量按86%计算后的查询列名改为“零件净重”。?
要求:?
?考虑表扫描的情况。
?考虑建立适当索引的情况。?
3)?考虑重写SQL脚本的情况。?
4)?用不同的方法实现本题中的查询操作,分析系统为各种查询实现方法生成的执行计划和客户统计信息。?
5)?记录各种查询的平均执行时间,决定哪种查询实现方法是相对最优的。
(2)查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。?
要求:?
?考虑表扫描的情况。?
?考虑建立适当索引的情况。?
3)?考虑重写SQL脚本的情况。?
4)?用不同的方法实现本题中的查询操作,分析系统为各种查询实现方法生成的执行计划和客户统计信息。?
5)?记录各种查询的平均执行时间,决定哪种查询实现方法是相对最优的。
实验结果
(1)
方法一:“表扫描”
Sql语句如下:
select PNO,PNAME,WEIGHT*0.86 零件净重
from P
实验结果截图:
方法二:“在P(PNO)上建立唯一索引”
create unique index PNO_index on P(PNO)
select PNO,PNAME,WEIGHT*0.86 零件净重
from P
实验结果截图:
由上可知,方法二相对最优。
(2)
方法一:多表间连接
declare i int
set i=0
while i<100
begin
set i=i+1
select SPJ.JNO
from SPJ,P,S
where P.PNO=SPJ.PNO
and SPJ.SNO=S.SNO
and P.COLOR='红' 实验结果截图:
and S.CITY!='天津'
end
方法二:在每个表中分别查询
declare i int
set i=0
while i<100
begin
set i=i+1
select SPJ.JNO 实验结果截图:
from SPJ
where SPJ.PNO in
(select P.PNO
from P
where P.PNO=SPJ.PNO
and P.COLOR='红'
)
and SPJ.SNO not in
(select S.SNO
from S
where S.CITY='天津'
)
end
方法三
declare i int
set i=0
while i<100
begin
set i=i+1
select SPJ.JNO
from SPJ
where SPJ.SNO not in
(select S.SNO
from S
where S.CITY='天津'
)
and SPJ.PNO in
(select P.PNO
from P
where P.PNO=SPJ.PNO and P.COLOR='红'
)
end
实验结果截图:
方法四
declare i int
set i=0
while i<100
begin
set i=i+1
select SPJ.JNO
from SPJ
where SPJ.SNO in
(select S.SNO 实验结果截图:
from S
where S.CITY<>'天津'
)
and SPJ.PNO in
(select P.PNO
from P
where P.PNO=SPJ.PNO
and P.COLOR='红'
)
end
由上可知,方法三最优。
实验小结
通过本次实验,了解DBMS对查询优化的处理过程。对于不懂的问题通过上网搜索和书上查找等方式,不仅能快速地掌握,还能了解到该问题涉及的其他方面的知识。