解析MySQL中的索引与视图

149 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

1. 视图

有数据库中一张表或者多张表根据特定的条件查询得出数据构造成的虚拟表

1.1视图的作用

  • 安全性:可以指定对数据表中的数据进行保护,将公开数据生成视图,授权用户访问视图;⽤户通过查询视图可以获取数据表中公开的数据,从⽽达到将数据表中的部分数据对⽤户隐藏。
  • 简单性:如果我们要查询多张表,可以通过多表联查实现;但是通过视图,可以将这些联查表的结果公开,用户可以直接通过查询视图获得多表数据,操作简便

1.2 创建视图

注意: 所有实例都以test数据库中的emp、dept、salgrade表为例

  • emp 表

emp表.png

  • dept表

dept表.png

  • salgrade表

salgrade表.png

语法:

create view 视图名 
as
选择语句
​
// 查询视图语法
select * from 视图名;

实例1 : 将员工表中部门为20的员工生成一个视图

create view dept20 
as 
select * from emp where deptno = 20;

创建视图1.png

实例2 : 查询员工对应的部门

create view deptEMP
as
select e.ename,d.dname
from  emp e  join dept d 
on e.deptno = d.deptno;

视图-员工对应的部门结果.png

1.3 视图的特性

视图是 虚拟表,查询视图的数据是来源与数据表的。 当对视图进行操作,会发生一下情况

所以查看所有视图所用到的指令也时: shwo tables;

1.3.1 查询操作

  • 如果数据表中添加了新的数据,而且这个数据满足创建视图时查询语句的条件,通过拆线呢视图也可以查询新的数据;当删除元表中满足查询条件的数据时,也会从视图表中删除

1.3.2 新增数据

如果视图中添加数据,数据也会被添加到原数据表中

1.3.3删除操作

如果视图中删除数据,数据也会在原数据表中被删除

1.3.4修改操作

通过在视图中修改数据,原数据表中的数据也会被修改

建议: 对复杂查询简化操作,并且不会对数据进行修改的情况下可以使用视图,CRUD过于频繁不建议使用视图 !

1.4 查询视图结构

desc 视图名;

1.5 修改视图

修改视图有两种方式

// 方式一
create or replace view dept20 (视图名)
as
select * from emp where sal =  2000;
​
// 方式二
​
alter view deptEMP
as
select * from emp where ename = 'BOOS';

1.6 删除视图

删除视图时,不会影响原数据表中的数据

drop view 视图名

2. 索引

索引是用来提高数据表中数据的查询效率

原理: 将数据表中某一列/某几列的值去除来构造成便于查找的结构进行存储,生成数据表的目录

2.1 索引的分类

  • 主键索引: 在数据表的主键字段创建索引,这个字段必须被primary key 修饰,每张表只能有一个主键
  • 唯一索引 : 在数据表中的唯一列创建的索引,此列的所有值只能出现一次,可以为null
  • 普通索引: 在普通字段上创建的索引,没有唯一性限制
  • 组合索引:两个及以上的字段联合起来创建的索引

注意:

  1. 在创建数据表时,字段声明为主键,会自动在主键字段创建索引;
  2. 在创建索引时,将字段声明为唯一键,会自动在唯一字段创建唯一索引

2.2 创建索引

2.2.1 唯一索引

-- 唯一索引的列的值不能重复
-- create unique index 索引名 on 表名(列名)

2.2.2 普通索引

-- 索引的列的值没有唯一性
-- create  index 索引名 on 表名(列名)

2.2.3 组合索引

-- create  index 索引名 on 表名(列名1,列名2...)

2.2.4 全文索引

MySQL 5.6 版本新增的索引,可以通过此索引进⾏全⽂检索操作,因为MySQL全⽂检索 不⽀持中⽂,因此这个全⽂索引不被开发者关注,在应⽤开发中通常是通过搜索引擎 (数据库中间件)实现全⽂检索

create fulltext index <index_name> on 表名(字段名);

2.2 索引的使用

索引创建完成之后无序调用,当根据创建索引的列进行数据查询的时候,会自动使用索引;

组合索引需要根据创建索引的所有字段进行拆线呢时触发

2.3 查看索引

-- 方法一
show create table 表名\G;
​
-- 方法二
show keys from 表名\G;

2.4 索引总结

优点

  1. 索引大大降低了数据库服务器在执行查询操作时扫描数据的时间,提高查询效率;
  2. 索引可以避免服务器排序,将随机IO编程顺序IO

缺点

  1. 索引是根据数据表的列创建的,当数据表中数据发生DML操作时,索引也需要更新;
  2. 索引文件也会占用磁盘空间

注意事项

  1. 数据表中数据不多时,不推荐使用索引
  2. 有大量DML操作时,不推荐使用
  3. 不要在数据读取频率高的字段上创建索引

3.总结

  1. 数据库的基础学习到这里已经结束了,给我的感觉就是快,非常块,快麻了,学一个知识点马上实操一些练习题加深印象,在之后的学习过程中,数据库只会越学越熟练,学的知识也会越来越深,但是在前进的时候一定要常回来看看基础的知识点,毕竟基础才是成长的基石!
  2. 今天是周末,这周除了 完成了java基础学习的收尾工作,到今天数据库也即将告一段落,但是马上又会相见的, 自己的学习状态也并不像一路猛冲的 学习进度一样给非常高昂,相反今天还有些松懈,有些懒散,有些堕落,下午吃完饭, 在宿舍完了一会儿手机,看看视频,玩一下游戏,因为房间没有开灯,当我缓过神来的时候,已经是伸手不见五指,只有一个手机灯照着自己的脸,赶忙放下手机开始了学习,学习的过程中,总是困难重重,一不留神,你就控制不了自己的欲望了,希望在今后的学习中,贵在坚持,加油!

\