数据库实验七【大数据库实验报告材料七】

  学院 计算机学院/软件学院

 实 验 报 告

 专业 软件工程 班级 软件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对查询优化的处理过程。对于不懂的问题通过上网搜索和书上查找等方式,不仅能快速地掌握,还能了解到该问题涉及的其他方面的知识。