在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式: 系(系号,系名),系号为主码 学生(学号,姓名,所在系号),学号为主码 课程(课程号,课程名,开课系号),课程号为主码 选课(学号,课程号,选课时间),

admin2011-05-12  47

问题 在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式:
   系(系号,系名),系号为主码
   学生(学号,姓名,所在系号),学号为主码
   课程(课程号,课程名,开课系号),课程号为主码
   选课(学号,课程号,选课时间),学号和课程号为主码
   开发人员在将关系模式实施到SQL Server 2000的“教务”数据库时,使用了如下表结构定义语句:
   CREATE TABLE系(系号varchar(10)NOT NULL,系名varchar(100))
   CREATE TABLE学生(学号varchar(50)NOT NULL,姓名varchar(50),所在系号varchar(10))
   CREATE TABLE课程(课程号varchar(50)NOT NULL,课程名varchar(100),开课系号varchar(10))
   CREATE TABLE选课(学号varchar(50)NOT NULL,课程号varchar(50)NOT NULL,选课时间datetime)
   在执行如下查询语句时发现执行效率很低:
   SELECT*FROM选课JOIN学生ON学生.学号=选课.学号
   JOIN系ON系.系号=学生.所在系号
   JOIN课程ON课程.课程号=选课.课程号
   WHERE系.系号=012
   AND convert(varchar(10),选课时间,120)>=2010-01-01
   ①在查找原因时发现建表语句有问题。请指出问题并说明该问题是否会影响此查询语句的执行效率。
   ②设已在“选课”表的“选课时间”列及“学生”表的“所在系号”列上建立了索引。请问这两个索引是否能够提高该查询语句的执行效率?如果不能,请说明原因。

选项

答案①建表时没有设置主键,但不会影响此查询语句的执行效率。 ②“选课”表的“选课时间”列上建立了索引能够提高执行效率。经常出现在Where子句中的字段,特别是大表的字段,应该建立索引。索引的作用就类似于书的目录,书的目录会按照章节的顺序排列。会指想某一张的位置。这样如果在一本数百页的书里面查找某个章节位置的时候,我们就可以只扫描书的目录,扫描的范围缩了n倍,查询的效率自然就提高了。另外在SQL Server内存够用的情况下索引会被放到内存中,在内存中查找自然又会提高效率;所以我们必须得合理利用索引.

解析
转载请注明原文地址:https://jikaoti.com/ti/eXt7FFFM
0

相关试题推荐
最新回复(0)