收藏 分销(赏)

天津理工大学 数据库实验四--查询优化.doc

上传人:xrp****65 文档编号:9433040 上传时间:2025-03-26 格式:DOC 页数:12 大小:609KB
下载 相关 举报
天津理工大学 数据库实验四--查询优化.doc_第1页
第1页 / 共12页
天津理工大学 数据库实验四--查询优化.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述
实验报告 学院(系)名称:计算机与通信工程学院 姓名 Touchkiss 学号 20125577 专业 计算机科学与技术 班级 2班 实验项目 查询优化 课程名称 数据库系统 课程代码 0668026 实验时间 2014/12/5 实验地点 7#215 批改意见 成绩 教师签字: 实验环境(软、硬件环境) 一、 实验目的 1. 了解数据库查询优化方法和查询计划的概念 2. 学会分析查询的代价,并通过建立索引或者修改SQL语句来降低查询代价 二、 实验内容与要求 基于教材中的student、course、SC表,通过存储过程(要求在报告中写出存储过程),插入多条元组(1万条以上),考虑不同的SQL操作,分析比较执行代价。 1. 单表查询 (1) 直接查询:查询student表中年龄在20岁以上的学生记录 (2) 建立索引后,再查询:查询student表中年龄在20岁以上的学生记录 (3) 表中元组数量少,查询结果所占比例大:查询student表中年龄在20岁以上的学生记录 (4) 表元组数量多,查询结果所占比例小:查询student表中年龄在20岁以上的学生记录 分析以上四种SQL查询的执行效率,并做总结: 2. 多表查询:基于student、course、SC表,按照以下要求,实现多表查询,并分析比较执行效率。(自行设计查询语句,要求针对同一查询内容,使用以下四种方式) (1) 多表连接查询 (2) 嵌套查询 (3) 建立索引 (4) 使用游标 分析比较: 3.综合练习 (1) 对于student表,不按照姓名创建索引,查询某个姓名,所需要的时间。 (2) 对于student表,按照姓名创建索引,查询某个姓名,所需要的时间。 (3) 对于student表,不按照系别创建索引,查询某个系所有学生,所需要的时间。 (4) 对于student表,按照系别创建各种索引,查询某个系所有学生,所需要的时间。 (5) 查询sc表所需时间。 (6) 将student和sc连接所需时间。 (7) 将student和sc和course连接所需时间。 (8)查询选修了“数据库”学生的学号姓名,分别用嵌套和连接的方法,观察两种方法所用的时间。 三、 本次实验总结: 基于教材中的student、course、SC表,通过存储过程(要求在报告中写出存储过程),插入多条元组(1万条以上),考虑不同的SQL操作,分析比较执行代价。 存储过程: create procedure insert_stu @sexflag nvarchar='男', @age int=0, @dept char(8)='MA',@i int=1 as while @i<600000 begin set @age = 20 if @i%4 = 0 set @age=17 if @i%4 = 1 set @age=18 if @i%4 = 2 set @age = 19 if @i%2 = 0 set @sexflag = '男' else set @sexflag = '女' set @dept = 'MA' if @i%3 = 0 set @dept = 'CS' if @i%3 = 1 set @dept = 'IS' insert into dbo.Student values(@i, 'Name'+cast(@i as char), @sexflag, @age, @dept) set @i=@i+1 end create procedure insert_cou @i int = 1 as while @i<1000 begin insert into dbo.Course (Cno,Cname,Ccredit) values(@i, 'Course'+ cast(@i as char), @i%5) set @i=@i+1 end USE [lab] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[insert_s_c] @i int =1, @j int =1 as while @i<6000 begin set @j=1 while @j<1000 begin insert into dbo.SC values(@i,@j,(@i*@j)%100) set @j=@j+1 end set @i=@i+1 end 1.单表查询 (1)直接查询:查询student表中年龄在20岁以上的学生记录 dbcc dropcleanbuffers dbcc freeproccache set statistics io on set statistics time on go select * from dbo.Student where Sage >= 20 go set statistics io off set statistics time off (2)建立索引后,再查询:查询student表中年龄在20岁以上的学生记录 (3)表中元组数量少,查询结果所占比例大:查询student表中年龄在19岁以下的学生记录 STU表中共1000条数据 (4)表元组数量多,查询结果所占比例小:查询student表中年龄在20岁以上的学生记录 Student表中有600000条数据 分析以上四种SQL查询的执行效率,并做总结: 2.多表查询:基于student、course、SC表,按照以下要求,实现多表查询,并分析比较执行效率。(自行设计查询语句,要求针对同一查询内容,使用以下四种方式) (1)多表连接查询 set statistics io on set statistics time on go select Sname from dbo.Student,dbo.Course,dbo.SC where Student.Sno=SC.Sno and SC.Cno = Course.Cno and Cname='Course1' and Grade>90 go set statistics io off set statistics time off (2)嵌套查询 set statistics io on set statistics time on go select Sname from Student where Sno in (select Sno from SC where Grade > 90 and Cno =(select Cno from Course where Cname = 'Courserse1')) go set statistics io off set statistics time off (3)建立索引 set statistics io on set statistics time on go create index Studentgra1 on SC(Grade) select Sname from dbo.Student,dbo.Course,dbo.SC where Student.Sno=SC.Sno and SC.Cno = Course.Cno and Cname='Courserse1' and Grade>90 go set statistics io off set statistics time off (4)使用游标 set statistics io on set statistics time on go declare my_cursor cursor scroll dynamic for select Sname from dbo.Student,dbo.Course,dbo.SC where Student.Sno=SC.Sno and SC.Cno = Course.Cno and Cname='Course1' and Grade>90 open my_cursor declare @name sysname fetch next from my_cursor into @name while(@@fetch_status=0) begin print @name fetch next from my_cursor into @name end close my_cursor deallocate my_cursor go set statistics io off set statistics time off 分析比较: 3.综合练习 (1) 对于student表,不按照姓名创建索引,查询某个姓名,所需要的时间。 set statistics io on set statistics time on go select * from dbo.Student where Sname = 'Name1999' go set statistics io off set statistics time off (2) 对于student表,按照姓名创建索引,查询某个姓名,所需要的时间。 set statistics io on set statistics time on go create index Sname on Student(Sname) select * from dbo.Student where Sname='Name1999' go set statistics io off set statistics time off (3) 对于student表,不按照系别创建索引,查询某个系所有学生,所需要的时间。 set statistics io on set statistics time on go select * from dbo.Student where Sdept='CS' go set statistics io off set statistics time off (4) 对于student表,按照系别创建各种索引,查询某个系所有学生,所需要的时间。 set statistics io on set statistics time on go create index Sdept on dbo.Student (Sdept) select * from dbo.Student where Sdept='CS' go set statistics io off set statistics time off (5) 查询sc表所需时间。 set statistics io on set statistics time on go select * from dbo.SC go set statistics io off set statistics time off (6) 将student和sc连接所需时间。 set statistics io on set statistics time on go select * from dbo.Student,dbo.SC where Student.Sno=SC.Sno go set statistics io off set statistics time off (7) 将student和sc和course连接所需时间。 set statistics io on set statistics time on go select * from dbo.Student,dbo.SC,dbo.Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno go set statistics io off set statistics time off (8)查询选修了“数据库”学生的学号姓名,分别用嵌套和连接的方法,观察两种方法所用的时间。 set statistics io on set statistics time on go select Sno,Sname from dbo.Student where Sno in (select sno from dbo.SC where Cno in (select cno from dbo.Course where Cname = 'Course999')) go set statistics io off set statistics time off 本次实验总结:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服