在SQL Server 2008的数据库中存在如下两张关系表: 学生表(学号,姓名,性别,身份证号,系所号),学号为主码 系所表(系所号,系所名,系所简称),系所号为主码 在数据库中执行如下T-SQL代码: DECLARE@DeptID varchar(1

admin2019-07-07  15

问题 在SQL Server 2008的数据库中存在如下两张关系表:
学生表(学号,姓名,性别,身份证号,系所号),学号为主码
系所表(系所号,系所名,系所简称),系所号为主码
在数据库中执行如下T-SQL代码:
DECLARE@DeptID varchar(10)
DECLARE@cnt int
SET @cnt=0
DECLARE cursorl cursor FOR SELECT系所号 FROM 系所表
WHERE 系所名 LIKE′%电%′
OPEN cursorl
FETCH NEXT from cursorl into @DeptlD
WHILE @@ FETCH_STATUS=0
BEGIN
DECLARE @ temp_cnt int
SELECT@temp_cnt=COUNT(*) FROM 学生表 WHERE 系所号 = @DeptID
SET @ cnt = @cnt + @temp_cnt
FETCH NEXT from cursorl into@DeptID
END
CLOSE cursorl
DEALLOCATE cursorl
SELECT @ cnt AS 学生总数
执行过程中发现速度比较缓慢,为了解决性能问题,需在功能不变的情况下,将此T-SQL代码改为一条SQL语句:
SELECT COUNT(*) FROM 学生表 JOIN 系所表 ON 学生表.系所号=系所表.系所号
WHERE;系所名 LIKE′%电%′;
请分析此改变是否可以提高性能,并给出原因。

选项

答案SELECT COUNT(*) FROM 学生表 JOIN 系所表 ON 学生表.系所号=系所表.系所号 WHERE 系所名 LIKE′%电%′性能更好。 原因:T-SQL的代码需要先扫描一遍系所表,然后根据扫描得到的每个记录重新扫描一遍学生表得出结果。使用所写的SQL语句实现同样的功能,将学生表和系所表连接之后按条件过滤,只需要扫描一遍连接之后的表即可。

解析 本题考查的是T-SQL与SQL语句使用的区别,以及索引相关知识,如索引定义,在什么地方建立索引,建立索引的条件等等。
T-SQL即Transact-SQL,是SQL在Microsoft SQL Server上的增强版,它是用来让应用程序与SQL Server沟通的主要语言。T-SQL提供标准SQL的DDL和DML功能,加上延伸的函数、系统预存程序以及程式设计结构(例如IF和WHILE)让程式设计更有弹性。
SQL是集DDL、DML、DCL为一体的标准关系数据库语言。其中DDL数据定义语言用于定义和管理SQL数据库中的所有对象的语言;DML数据操纵语言,SQL中处理数据等操作统称为数据操纵语言。
SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言;T-SQL是在SQL基础上扩展的SQL Server中使用的语言。
转载请注明原文地址:https://kaotiyun.com/show/mDlZ777K
0

最新回复(0)