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

admin2019-01-08  23

问题 在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式:
    系(系号,系名),系号为主码
    学生(学号,姓名,所在系号),学号为主码
    课程(课程号,课程名,开课系号),课程号为主码
    选课(学号,课程号,选课时间),学号和课程号为主码
    开发人员在将关系模式实施到SQL Server 2008的“教务”数据库时,使用了如下表结构定义语句:
    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://kaotiyun.com/show/dWlZ777K
0

最新回复(0)