《数据库原理》实验报告DB4——视图与索引
一. 实验内容、步骤以及结果
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中增加一条数据。
提示:
- SPJ表中JNO允许为空时,数据可以插入基本表,此时JNO为NULL,由于JNO为NULL,所以视图中没有该条数据。
- 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——视图与索引相关推荐
- mysql数据库原理实验报告_数据库原理实验报告(Mysql).doc
数据库原理实验报告(Mysql).doc 实验项目列表 序号实验项目名称指导教师1实验一 数据库的定义实验(验证性)2实验二 数据库的建立和维护实验(验证性)3实验三 数据库的查询实验(验证性)4实验 ...
- mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc
数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...
- 数据库原理实验报告【全集】
如果对你有帮助,记得点赞哦! 实验1~8:SQL Server 2008的安装及管理工具的使用.SQL Server数据库的管理.SQL Server数据表的管理.数据查询.索引和视图.数据完整性.T ...
- 数据库原理实验报告5
接上次的实验,本次主要练习数据查询由于上次做的比较多,所以本次实验的一些题目在上一次实验报告就已经发布了 首先这次实验是本学期第一次在学校机房做,开始不太习惯,导致有一些截图不是很完整,好在最终还是明 ...
- mysql数据完整性实验报告,数据库原理实验报告(Mysql)
图5 course表 图6 sc表 图7 course的约束条件 图8 sc的约束条件 3.利用命令方式建表: (1).单击"查询",然后点击"新建查询",在弹 ...
- 【数据库原理实验(openGauss)】视图
视图 文章目录 视图 一.创建视图 二.基于视图的查询 三.基于视图的更新 四.删除视图 五.对视图的理解 一.创建视图 CREATE VIEW CS_Students AS SELECT Sno, ...
- 数据库原理实验报告(一)
答案在后面 一.在studentdb中创建架构Production和Person并比较区别. create schema Production --架构命名不能以数字开头 create schema ...
- 【数据库原理实验(openGauss)】实验报告
<数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...
- 数据库原理实验二 数据库管理 实验报告
广州大学学生实验报告实验二:数据库管理 此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合! 数据库原理实验之实验二:数据库管理 软件:Oracle SQL Developer 今天实验才刚开始,花 ...
最新文章
- Python 图像 一样大小_Python图像处理,顺便生成一张海报
- matlab怎么实现拖音,请问M8190A怎么通过Matlab实现多音调
- flink写入 mysql_flink写数据到mysql(java)
- js 中对于 css 的变量操作(React也可)
- PHP商城数据库安全事务处理方法
- 洞察设计模式的底层逻辑
- python本地识别二维码_十行代码实现文字识别,你敢信?
- 如何用Html+css3写一个简单的网页
- Python+OpenCV:高动态范围(High Dynamic Range, HDR)
- Error while executing: am start -n错误解决方案
- 响应式mysql_Spring Data R2DBC响应式操作MySQL
- 怎样解决DEDE织梦友情链接字数限制与链接个数限制
- BP神经网络预测matlab代码讲解与实现步骤
- 阿里云弹性手机购买与配置
- java集合转字符串 字符串转集合 StringUtils 一个强大的字符串操作工具
- 图片格式转换器ico_格式工厂万能格式转换器
- 05矩阵04——分块矩阵、分块矩阵的运算、分块矩阵的初等变换、分块初等矩阵的性质、按行分块、按列分块
- vue 图片放大、缩小、旋转、滚轮操作图片放大缩小
- python 换页符_python分页字符串
- 软件开发人员的职业发展规划
热门文章
- Koomail VS. Foxmail
- UE4的.pak文件的加密和签名
- 10大经典数据分析模型,你知道几个?
- 臧圩人:java面试题解惑系列(一)——类的初始化顺序学习笔记
- 收银机打印数据截取_每天在掏空你账户余额的收银机,你知道它的历史吗?
- idea无法识别java文件、Maven下载依赖报错:Cannot resolve...或者Could not find artifact...实测有效
- Go 1.19.3 error原理简析
- Mask R-CNN 原理解析
- java解析多层json,手把手教你怎么解析多层嵌套的JSON数据(使用JSONModel)
- 用先进的运动驱动控制芯片实现电机的静音防抖