北邮大三下数据库实验六mysql版本.docxVIP

  • 2
  • 0
  • 约4.79千字
  • 约 10页
  • 2019-08-01 发布于山西
  • 举报
实验报告 学院: 计算机学院 课程名称: 数据库系统 实验名称: 实验六 数据查询分析实验 班级: 2009211311 姓名: schnee 学号: 实验六数据查询分析实验 实验目的 通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解MySQLServer5.5中查询分析器的使用,并进一步提高编写复杂查询的SQL程序的能力。 实验环境 操作系统:MicrosoftWindows7旗舰版(32位)。 软件:数据库版本:MySQL5.5 实验内容及过程 索引对查询的影响 3.1的四个小题,由于MySQL没有聚集索引与非聚集索引之分,所以无法验证,直接给出讨论结果。 对结果集只有一个元组的查询分三种情况进行执行(比如查询一个具体学生的信息),用查询分析器的执行步骤和结果对执行进行分析比较。 不建立索引,在student表中查询学号为“31427”的学生 登录mysql后输入setprofiling=1; 然后执行语句,则showprofiles就显示出来之前输入的命令的执行时间。 如果查询细节的话则showprofileforquery2;2即语句的顺序。 详见截图,则执行时间约为60毫秒: 详细的select*fromstudentwheresno=’31427’;的执行细节则为: 在学号上建立非聚集索引 在学号上建立聚集索引 先解释下索引。索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。 聚集索引又叫主索引,其索引的排序方式和正文的排序方式一致。每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。用聚合索引比用不是聚合索引的主键速度快;用聚合索引比用一般的主键作orderby时速度快,特别是在小数据量情况下。 相对应的,非聚集索引也叫辅助索引。 当数据量很小的时候,用聚集索引作为排序列要比使用非聚集索引速度快得明显的多;而数据量如果很大的话,如10万以上,则二者的速度差别不明显。此外,聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入)。但是查询数据比非聚集数据的速度快。 由于学号是student的主键,所以根据以上分析,我们可以知道,当只有一个查询结果时,这三种方法的快慢排序为: 非聚集索引快于聚集索引快于无索引。 (附:同学在SQLServer下测试的执行时间结果为1ms:2ms:21ms) 对结果集中有多个元组的查询(例如查看某门成绩的成绩表,在此,以查看sc表的“C01”成绩为例)分类似3.1.1的三种情况进行执行比较。 对于有多个元组的查询情况,差别不如3.1.1那么明显。三种情况差别都不大。 不过,还是聚集索引快于非聚集索引快于无索引。 (附:同学在SQLServer下测试的执行时间结果为26ms:29ms:32ms) 对查询条件为一个连续的范围的查询(例如查看学号在某个范围内的学生的选课情况,在此以查询sc表中学号在’31404’和’31420’之间的学生的学号和课程号为例)分类似3.1.1.的三种情况进行执行比较,注意系统处理的选择。 对于查询条件为一个连续的范围的查询的情况,非聚集索引与无索引差别不是很大,不过聚集索引明显会快很多。 总体上,还是聚集索引快于非聚集索引快于无索引。 (附:同学在SQLServer下测试的执行时间结果为11ms:26ms:29ms) 索引代价。在有索引和无索引的情况下插入数据(例如在选课情况表SC上插入数据),比较插入的执行效率。 并非所有的情况索引都是会使速度变快的,比如我们往sc表里插入一条记录(‘001’,’C01’,’100’),同学在SQLServer下测试的执行时间结果为无索引用时2ms,但是有索引38ms!!!慢了非常多! 对相同查询功能不同查询语句的执行比较分析 比较有和没有groupby的查询效率并分析。 selectavg(grade) fromsc groupbycno havingcno=’C01’; selectavg(grade)

文档评论(0)

1亿VIP精品文档

相关文档