数据库原理实验四——视图与索引
Posted Alfred young
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理实验四——视图与索引相关的知识,希望对你有一定的参考价值。
实验目的
- 熟练掌握使用图形用户界面和SQL语言创建、操作和删除视图。
- 熟练掌握使用图形用户界面和SQL语言创建和删除索引。
- 理解与验证索引的作用。
实验内容
- 在Student数据库中,用SQL语句创建一个选修了“数据库”课程并且是2001年出生的学生的视图,视图中包括学号,姓名,性别,成绩。(5分)
CREATE VIEW STUDENT_2001(SNO,SNAME,SGENDER,SBIRTH)
AS
SELECT S.SNO,SNAME,SGENDER,GRADE FROM S,SC,C
WHERE S.SNO = SC.SNO AND C.CNO = SC.CNO AND CNAME = '数据库' AND SBIRTH LIKE '2001%';
- 在SPJ_MNG数据库中,用两种不同的SQL语句为工程项目名是“三建”的工程项目建立一个供应情况视图,包括供应商代码(SNO),零件代码(PNO),供应数量(QTY)创建以下视图(视图名:V_SPJ)。(10分)
方法一
CREATE VIEW V_SPJ
AS
SELECT SNO,PNO,QTY FROM SPJ
WHERE JNO IN
(
SELECT JNO FROM J
WHERE JNAME = '三建'
);
方法二
CREATE VIEW V_SPJ
AS
SELECT SNO,PNO,QTY FROM SPJ,J
WHERE SPJ.JNO = J.JNO AND JNAME = '三建';
- 用SQL语句针对第2小题的V_SPJ完成下面的视图查询。(10分)
(1) 找出“三建”工程项目使用的各种零件代码及其数量。
SELECT PNO,SUM(QTY)
FROM V_SPJ
GROUP BY PNO;
(2) 找出供应商S1的供应情况。
SELECT * FROM V_SPJ
WHERE SNO = 'S1';
- 用SQL语句针对第2小题的V_SPJ完成视图的数据更新。(15分)
(1) 给视图V_SPJ中增加一条数据。
根据提示信息或无法显示或需要触发器,因此不需要实现
(2) 修改视图V_SPJ中的任意一条数据的供应数量。
UPDATE V_SPJ
SET QTY = 400
WHERE SNO = 'S3' AND PNO = 'P1';
(3) 删除视图V_SPJ中的任意一条数据。
DELETE
FROM V_SPJ
WHERE SNO = 'S3' AND PNO = 'P1';
- 用图形用户界面对Student数据库中C表的Cno字段创建一个降序排列的索引,索引名称IX_CNo。(5分)
索引创建位置如图所示
- 使用SQL语句对Student数据库完成以下的索引操作。(15分)
(1) 在C表的CName属性上创建一个非唯一性的普通索引,索引名IX_CName。
CREATE INDEX IX_CName
ON C(CNAME);
(2) 在S表上创建一个名为IX_ngd的复合索引,该索引是针对sname, sgender, sdept属性集建立的升序索引。
CREATE INDEX IX_ngd
ON S(SNAME ASC,SGENDER ASC,SDEPT ASC);
(3) 删除C表的索引IX_CNo。
DROP INDEX IX_CNo ON C;
(4) 基于以上的索引(c表:cno的主键索引,cname的普通索引;S表:sno的主键索引,IX_nga复合索引),用explain得到的查询计划观察每个查询语句中索引的使用情况。
DROP INDEX IX_CNo ON C;
① explain select * from c;
未使用索引
② explain select * from c where cno = ‘1’;
使用主键索引
③ explain select * from c where cname=’数据库’ ;
使用主键索引
④ explain select * from c where cname like ‘%数据库%’;
未使用索引
⑤ explain select * from c where cname like ‘数据库%’;
未使用索引
⑥ explain select * from s where sname =‘张立’ and sno=‘2001’;
使用复合索引
⑦ explain select * from s where sname =‘张立’ and sgender=‘男’ and sdept=‘IS’;
使用复合索引
⑧ explain select * from s where sname =‘张立’ and sgender=‘男’;
使用复合索引
⑨ explain select * from s where sname =‘张立’;
使用复合索引
⑩ explain select * from s where sgender =‘男’;
未使用索引
⑪ explain select * from s where sgender =‘男’ and sdept=‘IS’;
未使用索引
- 假设有一个如下的基本表userinfo,自己设计一个实验验证索引对数据库查询效率的提升作用。(40分)
create table userinfo
(
user_id int primary key, //用户ID
username varchar(10), //用户名
gender char(1), //性别
age int, //年龄
c_id int //学院编号
)
(1) 验证有索引和无索引的查询效率差异。
在age上创建一个索引,并按照如下语句进行查询
EXPLAIN SELECT *
FROM userinfo
WHERE age = 25;
(2) 验证单字段窄索引和多字段构成的宽索引的查询效率异,注意理解宽索引中的最左匹配原则。
首先在age上创建一个窄索引
然后查询
EXPLAIN SELECT username,age,gender,c_id
FROM userinfo
WHERE gender = 'm' AND age = 25 AND c_id = 1;
然后在age,gender,c_id创建一个宽索引
然后同上查询即可知道查询效率的差异。
以上是关于数据库原理实验四——视图与索引的主要内容,如果未能解决你的问题,请参考以下文章