2022年sybase数据库查询索引优化 .pdf
《2022年sybase数据库查询索引优化 .pdf》由会员分享,可在线阅读,更多相关《2022年sybase数据库查询索引优化 .pdf(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Sybase 数据库查询索引优化一、实验目的. 2二、实验环境. 2三、实验内容. 21、书写脚本在课程-学生表上插入100 条记录,在学生表上插入10000 条记录。 . 22、索引对查询的影响. 33. 索引代价: . 84 对相同查询功能不同查询语句的执行比较分析:. 10(1)查询至少选修了三门课程的学生的学号和姓名; . 10对于无索引的表格 . 10两者比较结果. 12对于非聚集索引的表格. 13两者比较结果. 15对于聚集索引的表格 . 15两者比较结果. 17最终比较结果. 18(2)查询优化 . 181:查询选修了课程编号为“dep04_s002”且成绩高于85 分的学生信息
2、 . 18对于无索引的表格 . 18得出初步结论. 222:查询所有学生的学号、姓名、选修的课程名称和成绩;. 23得出初步结论. 273:查询计算机科学系林红同学选修的课程名称、学分和成绩 . 28得出初步结论. 34缓存区优化. 34最后结论 : . 38四、实验中遇到的其他问题和解决方案. 38五、实验心得. 45名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 45 页 - - - - - - - - - 一、实验目的熟悉了解 Sybase中查询分析器的使用,理解数
3、据库查询优化的基本概念。通过对不同情况下查询语句的执行情况的对比分析,巩固加深查询优化的理解,并进行书写优化 SQL 语句的初步训练,提高编写高效SQL语句进行数据查询的能力。二、实验环境在 Win7 系统中安装sybase。三、实验内容实验中要进行表中记录数多少、结果集大小、有无索引、不同书写方式的等效SQL、多表连接查询等情况进行查询计划分析,并比较各种查询计划的效率优劣。1、书写脚本在课程-学生表上插入100 条记录,在学生表上插入10000 条记录。在实验中 , 创建了 STU10000的学生表和 STU_COU10000 课程 - 学生表向课程 -学生表上插入100条记录名师资料总结
4、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 45 页 - - - - - - - - - 用脚本向学生表中插入了10000条记录。2、索引对查询的影响预备知识:1创建索引语法:create unique clustered | unclustered index index-name on table-name( column-name , )SYBASE 提供了两种索引,聚簇索引和非聚簇索引,聚簇索引影响到记录的物理存放,所以一个表只能有一个聚簇索引,每个表最多有249个非聚簇
5、索引。索引中可以包含 116列,但索引项宽度不能超过255个字符。例如:在 LSHSZD 上创建索引create unique clustered index LSHSZD on LSHSZD(F_FLBH,F_HSBH) go create nonclustered index LSHSZDJS on LSHSZD(F_HSJS) go 2删除索引drop index table_name.index_name, table_name.index_name例如:drop index LSKMZD.LSKMZD 在学生表的学生姓名列上建立非簇集索引,建立簇集索引,不建立索引因为对同样的数据建立
6、非簇集索引,建立簇集索引, 不建立索引, 所以我建立了 STU10000M和STU10000T 临时表来进行对比,其中STU10000M 创建了簇集索引,STU10000T 建立非簇集索引,原表不建立索引。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 45 页 - - - - - - - - - STU10000M 创建簇集索引STU10000T 建立非簇集索引进行下列查询:对班级号查询一个范围内的所有记录(要注意结果集不大于20条记录)。无索引:名师资料总结 - -
7、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 45 页 - - - - - - - - - 簇集索引:非簇集索引:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 45 页 - - - - - - - - - 从上面可以看出,当我们查询小数据时,无索引的执行时间最长,簇集索引的执行时间次之, 非簇集索引的执行时间最短。这是因为无索引需要将所有的记录读入内存,需要的 IO操
8、作最多, 而簇集索引会对记录进行排序,对小范围数据没有优势,非簇集索引会对每个记录建一条索引,查询的效率最高。对课程号进行大范围查询(就是结果集包括几乎所有记录,比如有90条以上的记录) 。分析三种情况下的查询计划有何不同?在无索引情况下对课程-学生表进行大范围查询:无索引:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 45 页 - - - - - - - - - 对课程 -学生表建立非簇集索引:然后对课程 -学生表再次查询:删掉非簇集索引:对课程 -学生表建立簇集索引
9、:再次对课程 -学生表查询:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 45 页 - - - - - - - - - 从上面我们可以看出,当我们对表进行大范围的查询时,无索引的执行时间最长,非簇集索引略长于簇集索引。这是因为无索引的需要将所有的记录读入内存,然后选择合适的需要的时间最长, 簇集索引对索引项排序,因此大范围查找时只需要定位第一个满足条件的和最后一个满足条件的就可以依次读出所有需要的记录了,这样执行的时间最短。非簇集索引处于两者之间。3. 索引代价:在有一
10、般索引、簇集索引和无索引的情况下插入数据(例如在学生表上插入数据),比较插入的执行效率。插入记录的脚本语句如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 45 页 - - - - - - - - - 无索引非聚集索引聚集索引名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 45 页 - - - - - - - - - 类别所用的时间(秒)无索引0
11、.137 非聚集索引0.22 聚集索引0.425 结论:在无索引的情况下,插入最快,即增加了索引,增大了插入的代价。4 对相同查询功能不同查询语句的执行比较分析:(1)查询至少选修了三门课程的学生的学号和姓名;(a) select 学生 .学号 ,学生 .学生姓名from 学生left join 学生选课on 学生 .学号 =学生选课 .学号group by 学生 .学号 ,学生 .学生姓名having count (*)=3 (b) select 学生 .学号 ,学生 .学生姓名from 学生where 学生 .学号in (select 学号from 学生选课group by 学号havin
12、g count (*)=3) 对于无索引的表格针对 a语句select STU10000.student_id,student_name from STU10000 left join STU_COU100 on STU10000.student_id=STU_COU100.student_id group by STU10000.student_id,STU10000.student_name having count (*)=3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1
13、0 页,共 45 页 - - - - - - - - - 针对 b语句select STU10000.student_id,student_name from STU10000 where STU10000.student_id in ( select STU_COU100.student_id from STU_COU100 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 45 页 - - - - - - - - - group by STU_COU100.stude
14、nt_id having count (*)=3 ) 两者比较结果执行时间逻辑 I/O 物理 I/O CPU 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 45 页 - - - - - - - - - a语句0.096 683.3 801 315156 b 语句0.086 672 761.7 117218.5 从结果中可以看到,b语句在执行时间,I/O数和 cpu使用方面都比a语句好, b达到了优化的效果对于非聚集索引的表格针对 a语句select STU10000A
15、.student_id,student_name from STU10000A left join STU_COU100A on STU10000A.student_id=STU_COU100A.student_id group by STU10000A.student_id,STU10000A.student_name having count (*)=3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 45 页 - - - - - - - - - 针对 b语句sel
16、ect STU10000A.student_id,student_name from STU10000A where STU10000A.student_id in ( select STU_COU100A.student_id from STU_COU100A group by STU_COU100A.student_id having count (*)=3 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 45 页 - - - - - - - - - 两者比较结
17、果执行时间逻辑 I/O 物理 I/O CPU a语句0.098 659 759 117195 b 语句0.036 659 759 117195 对于非聚集索引来说,I/O和CPU没事什么特别的优化,但是运行时间变短了,有变化的是对表的访问概率不同,也算有小小的优化对于聚集索引的表格针对 a语句名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 45 页 - - - - - - - - - select STU10000B.student_id,student_name fr
18、om STU10000B left join STU_COU100B on STU10000B.student_id=STU_COU100B.student_id group by STU10000B.student_id,STU10000B.student_name having count (*)=3 针对 b语句select STU10000B.student_id,student_name from STU10000B where STU10000B.student_id in 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
19、 - 名师精心整理 - - - - - - - 第 16 页,共 45 页 - - - - - - - - - ( select STU_COU100B.student_id from STU_COU100B group by STU_COU100B.student_id having count (*)=3 ) 两者比较结果执行时间逻辑 I/O 物理 I/O CPU a语句0.318 682 798 124847 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 45
20、页 - - - - - - - - - b 语句0.05 662 759 114747 对聚集索引来讲,b 语句在时间方面比a 减少了好多,优化效果明显最终比较结果执行时间逻辑 I/O 物理 I/O CPU 无索引a语句0.096 683.3 801 315156 b 语句0.086 672 761.7 117218.5 非 聚 集 索引a语句0.098 659 759 117195 b 语句0.036 659 759 117195 聚集索引a语句0.318 682 798 124847 b 语句0.05 662 759 114747 总体来说,重写后的查询一定比原始查询更优。因为优化后连接和
21、笛卡尔乘积项减少,student_id在底部就进行了过滤,这正符合了代码优化的策略,让缩小范围的选择操作尽可能接近查询树的叶节点(2)查询优化除了建立适当索引,对SQL 语句重写外,还有其他手段来进行查询调优,例如调整缓冲区大小,事先建立视图等。设计实现下列查询,使之运行效率最高。写出你的查询形式,以及调优过程;并说明最优情况下的运行时间。1:查询选修了课程编号为“dep04_s002”且成绩高于85 分的学生的学号、姓名和成绩;对于无索引的表格针对普通语句select student.student_id,student_name,grade from student,student_cou
22、rse where student.student_id=student_course.student_id and course_id= dep04_s002 and grade85 查询结果:I/O查询名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 45 页 - - - - - - - - - 时间查询:针对优化语句select student.student_id,student_name,grade from student,(select student_id
23、,grade from student_course where course_id=dep04_s002 and grade85) as studentCourse where student.student_id=studentCourse.student_id 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 45 页 - - - - - - - - - 查询效果:关于 I/O 次数查询时间:名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
24、- - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 45 页 - - - - - - - - - 建立视图效果create view grade as select student.student_id,student_name,grade,course_id from student,student_course where student.student_id=student_course.student_id and grade85 查询结果关于 I/O 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年sybase数据库查询索引优化 2022 sybase 数据库 查询 索引 优化
限制150内