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

admin2019-07-07  20

问题 在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 学生总数
学生表的身份证号和姓名上建有一个复合索引,索引建立语句为
CREATE INDEX idx_身份证号_姓名 ON 学生表(身份证号,姓名)
请指出如下两个查询语句能否使用此索引并说明原因。
SELECT * FROM 学生表 WHERE 身份证号 =′123456789012345678′;
SELECT * FROM 学生表 WHERE 姓名 =′小明′;

选项

答案创建的复合索引对第二条语句的查询效率提高不明显,因为其是复合索引且身份证号排在前面,对查找姓名的查询效率提高不明显,而明显会提高第一条语句的查询效率。

解析 索引的知识
索引技术是一种快速数据访问技术,它将一个文件的每个记录在某个或某些领域(或称为属性)上的取值与该记录的物理地址直接联系起来,提供了一种根据记录域的取值快速访问文件记录的机制。索引的使用要恰到好处,其使用原则一般如下:
①经常在查询中作为条件被使用的列,应为其建立索引;
②频繁进行排序或分组(即进行group by或order by操作)的列,应为其建立索引;
③一个列的值域很大时,应为其建立索引;
④如果待排序的列由多个,应在这些列上建立复合索引。
转载请注明原文地址:https://jikaoti.com/ti/qi37FFFM
0

最新回复(0)