一. 实验内容、步骤以及结果

1. 在Student数据库中,用SQL语句创建一个选修了数据库课程并且是2001年出生的学生的视图,视图中包括学号,姓名,性别,成绩。(5分)

create view student_2001(sno,sname,sgender,grade)
as
select s.sno,sname,sgender,grade from s,sc,c
where s.sno = sc.sno and sc.cno = c.cno and cname = '数据库'
and birth like '2001%';

2. 用两种不同的SQL语句创建以下视图(视图名:V_SPJ)。(第五版教材第三章第九题)(10分)

①:

create view V_SPJ(sno,pno,qty)
as
select sno,pno,qty from spj
where jno in
(select jno from jwhere jname = '三建'
);

②:

create view V_SPJ(sno,pno,qty)
as
select sno,pno,qty from spj,s
where spj.jno = j.jno and jname = '三建';

3. 用SQL语句完成下面的视图查询。(10分)

(1) 找出三建工程项目使用的各种零件代码及其数量。

select pno,sum(qty) from V_SPJ
group by pno;

(2) 找出供应商S1的供应情况。

select * from V_SPJ
where sno = 's1';

4. 用SQL语句完成视图的数据更新。(15分)

(1) 给视图V_SPJ中增加一条数据。

提示:

  1. SPJ表中JNO允许为空时,数据可以插入基本表,此时JNO为NULL,由于JNO为NULL,所以视图中没有该条数据。
  2. SPJ表中JNO不能为空时,可以使用instead of触发器实现。MySQL不支持视图上创建触发器,在MySQL环境下不需完成该题。

(2) 修改视图V_SPJ中的任意一条数据的供应数量。

update V_SPJ set qty = 1000
where sno = 's1' and pno = 'p1';

(3) 删除视图V_SPJ中的任意一条数据。

delete from V_SPJ where sno = 's1' and pno = 'p1';

5. 用图形用户界面对Student数据库中C表的Cno字段创建一个降序排列的索引,索引名称IX_CNo。(5分)

6. 使用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);

提示:可以使用show index from tablename查看该表上的索引信息。

(3) 删除C表的索引IX_CNo。

drop index IX_CNo on c;

(4) 基于以上的索引(c表:cno的主键索引,cname的普通索引;S表:sno的主键索引,IX_nga复合索引),用explain得到的查询计划观察每个查询语句中索引的使用情况。

① explain select * from c;

未使用索引

② explain select * from c where cname=’数据库’ ;

使用主键索引

③ 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’;

未使用索引

具体情况之后补充

7. 假设有一个如下的基本表userinfo,自己设计一个实验验证索引对数据库查询效率的提升作用。(30分)

create table userinfo
(user_id int primary key,  //用户IDusername varchar(10),   //用户名gender char(1),       //性别age int,            //年龄c_id int            //学院编号
);

(1) 验证有索引和无索引的查询效率差异。

生成一万条测试数据插入表中。

  • 有索引:
explain SELECT * FROM userinfo WHERE age = 30;
  • 无索引:
explain SELECT * FROM userinfo WHERE age = 30;

对有索引和无索引的查询效率对比可以得到,首先看type列,无索引需要扫描全表,而有索引是ref类型,效率提高;再看rows列,有索引的预估扫描行数约为无索引的1%,可以看出效率大大提高。

(2) 验证单字段窄索引和多字段构成的宽索引的查询效率异,注意理解宽索引中的最左匹配原则。

  • 单字段窄索引:
    建立一个窄索引,索引内仅有age
explain SELECT username,age,gender,c_id FROM userinfo WHERE gender = 'w' and age = 30 and c_id = 2;
  • 多字段宽索引:
    建立一个宽索引,索引内包含age,gender和c_id(按顺序)
explain SELECT username,age,gender,c_id FROM userinfo WHERE gender = 'w' and age = 30 and c_id = 2;

对比可得宽索引效率要高于窄索引,它的预期查询行数为窄索引的11/196。
宽索引中的最左匹配原则是指,在宽索引的查询中,查询条件最左优先,在检索数据时从联合索引的最左边开始匹配,若不符合顺序,则无法使用所有的宽索引。

二.实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

《数据库原理》实验报告DB4——视图与索引相关推荐

  1. mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc

    数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...

  2. mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc

    数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...

  3. 数据库原理实验报告【全集】

    如果对你有帮助,记得点赞哦! 实验1~8:SQL Server 2008的安装及管理工具的使用.SQL Server数据库的管理.SQL Server数据表的管理.数据查询.索引和视图.数据完整性.T ...

  4. 数据库原理实验报告5

    接上次的实验,本次主要练习数据查询由于上次做的比较多,所以本次实验的一些题目在上一次实验报告就已经发布了 首先这次实验是本学期第一次在学校机房做,开始不太习惯,导致有一些截图不是很完整,好在最终还是明 ...

  5. mysql数据完整性实验报告,数据库原理实验报告(Mysql)

    图5 course表 图6 sc表 图7 course的约束条件 图8 sc的约束条件 3.利用命令方式建表: (1).单击"查询",然后点击"新建查询",在弹 ...

  6. 【数据库原理实验(openGauss)】视图

    视图 文章目录 视图 一.创建视图 二.基于视图的查询 三.基于视图的更新 四.删除视图 五.对视图的理解 一.创建视图 CREATE VIEW CS_Students AS SELECT Sno, ...

  7. 数据库原理实验报告(一)

    答案在后面 一.在studentdb中创建架构Production和Person并比较区别. create schema Production --架构命名不能以数字开头 create schema ...

  8. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  9. 数据库原理实验二 数据库管理 实验报告

    广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...

最新文章

  1. Python 图像 一样大小_Python图像处理,顺便生成一张海报
  2. matlab怎么实现拖音,请问M8190A怎么通过Matlab实现多音调
  3. flink写入 mysql_flink写数据到mysql(java)
  4. js 中对于 css 的变量操作(React也可)
  5. PHP商城数据库安全事务处理方法
  6. 洞察设计模式的底层逻辑
  7. python本地识别二维码_十行代码实现文字识别,你敢信?
  8. 如何用Html+css3写一个简单的网页
  9. Python+OpenCV:高动态范围(High Dynamic Range, HDR)
  10. Error while executing: am start -n错误解决方案
  11. 响应式mysql_Spring Data R2DBC响应式操作MySQL
  12. 怎样解决DEDE织梦友情链接字数限制与链接个数限制
  13. BP神经网络预测matlab代码讲解与实现步骤
  14. 阿里云弹性手机购买与配置
  15. java集合转字符串 字符串转集合 StringUtils 一个强大的字符串操作工具
  16. 图片格式转换器ico_格式工厂万能格式转换器
  17. 05矩阵04——分块矩阵、分块矩阵的运算、分块矩阵的初等变换、分块初等矩阵的性质、按行分块、按列分块
  18. vue 图片放大、缩小、旋转、滚轮操作图片放大缩小
  19. python 换页符_python分页字符串
  20. 软件开发人员的职业发展规划

热门文章

  1. Koomail VS. Foxmail
  2. UE4的.pak文件的加密和签名
  3. 10大经典数据分析模型,你知道几个?
  4. 臧圩人:java面试题解惑系列(一)——类的初始化顺序学习笔记
  5. 收银机打印数据截取_每天在掏空你账户余额的收银机,你知道它的历史吗?
  6. idea无法识别java文件、Maven下载依赖报错:Cannot resolve...或者Could not find artifact...实测有效
  7. Go 1.19.3 error原理简析
  8. Mask R-CNN 原理解析
  9. java解析多层json,手把手教你怎么解析多层嵌套的JSON数据(使用JSONModel)
  10. 用先进的运动驱动控制芯片实现电机的静音防抖