三级数据库技术

考试试题

[问答题](10分)在SQL Server 2008的数据库中存在如下两张关系表:学生表(学号,姓名,性别,身份证号,系所号),学号为主码系所表(系所号,系所名,系所简称),系所号为主码在数据库中执行如下T-SQL代码:DECLARE @DeptID varchar(10)DECLARE @cnt intSET @cnt= 0DECLARE cursor1 cursor FOR SELECT 系所号 FROM 系所表    WHERE 系所名 LIKE '%电%'OPEN cursor1FETCH NEXT from cursor1 into @DeptIDWHILE @@FETCH_STATUS = 0BEGIN    DECLARE @temp_cnt int    SELECT @temp_cnt = COUNT(*) FROM 学生表 WHERE 系所号 = @DeptID    SET @cnt = @cnt + @temp_cnt    FETCH NEXT from cursor1 into @DeptIDENDCLOSE cursor1DEALLOCATE cursor1SELECT @cnt AS 学生总数(1)执行过程中发现速度比较缓慢,为了解决性能问题,需在功能不变的情况下,将此T-SQL代码改为一条SQL语句:SELECT COUNT(*) FROM 学生表 JOIN 系所表 ON 学生表.系所号=系所表.系所号   WHERE 系所名 LIKE '%电%';请分析此改变是否可以提高性能,并给出原因。(2)学生表的身份证号和姓名上建有一个复合索引,索引建立语句为    CREATE INDEX idx_身份证号_姓名 ON 学生表 (身份证号,姓名)请指出如下两个查询语句能否使用此索引并说明原因。SELECT * FROM 学生表 WHERE 身份证号 = '123456789012345678';SELECT * FROM 学生表 WHERE 姓名 = '小明';