文章目录
一、视图1、介绍2、作用3、使用示例4、视图上的DML操作二、索引1、介绍2、作用3、分类4、创建4、删除5、验证一、视图
1、介绍
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。
2、作用
为什么要使用视图?
定制用户数据,聚焦特定数据
同一份数据,不同用户最终的要求不一样,如班主任、授课老师等,他们的关注点往往不同。
封装复杂查询,简化开发
几百张表连接查询,语句复杂,封装成视图后,仅一条语句搞定。
保护敏感数据
通过视图对外公开数据,不允许访问基表,保护基表数据。
比如:药品的实际进价→\to→药品的公开进价→\to→加点150150150%→\to→药品的销售价格
组合分散数据,创建视图分区
数据量巨大→\to→分库、分表(一张表数据可能存储在不同的数据库中)
最终汇总数据时,需要提取所有数据库中所有相同表的数据,可以用关键字union
实现。
列名中文化
不推荐使用视图实现,一般交给前端程序员实现。
3、使用示例
-- 查看部门编号为10的所有员工信息create view empvu10asselect empno, ename, jobfrom empwhere deptno = 10;-- 查看视图的表结构desc empvu10;-- 查询视图数据select * from empvu10;-- 给视图列取别名方法一create view v_dept_sum_avgasselect dname name, min(sal) minsal, max(sal) maxsal, avg(sal) avgsalfrom emp e, dept dwhere e.deptno = d.deptnogroup by dname;-- 给视图列取别名方法二(推荐)create view v_dept_sum_avg(name, minsal, maxsal, avgsal)asselect dname, min(sal), max(sal), avg(sal)from emp e, dept dwhere e.deptno = d.deptnogroup by dname;
4、视图上的DML操作
在视图上可以执行DML操作,但是基本上不使用。
可以通过视图删除基表中数据,只要视图中不出现:聚合函数、group by
子句、distinct
关键字可以通过视图修改基表中数据,只要视图中不出现:聚合函数、group by
子句、distinct
关键字、使用表达式定义的列可以通过视图向基表中插入数据,只要视图中不出现:聚合函数、group by
子句、distinct
关键字、使用表达式定义的列、基表中未在视图中选择的其他列定义为非空并且没有默认值
注:删除视图只是删除视图的定义,数据依然被存储在基表中。
二、索引
1、介绍
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。
索引是提高数据库性能的重要方式。
MySQL中,所有的数据类型都可以被索引。
2、作用
索引可以被用来加快查询的速度,但是索引也占用空间,会影响增删改的速度。
因此,对于需要大量查询的表,建议使用索引;对于需要大量增删改的表,不建议使用索引。
3、分类
索引分类:普通索引、唯一性索引、全文索引、单列索引、多列索引、空间索引
4、创建
表简单时,建议创建表时创建索引;表复杂时,建议创建表后创建索引
使用示例:
-- 创建索引方法一:(create table创建)create table t1 (id int unique,name varchar(50),unique index idx_id(id asc));-- 创建索引方法二:(create index创建【推荐】)create table t2 (id int unique,name varchar(50));create unique index idx_id_2on t2(id asc);
注意点
尽可能重复少的列,多列时重复少的列在前
text(char / varchar)全文索引
像身份证这种唯一的字段,MySQL中是通过唯一索引来维护的,这与其他数据库不同
索引创建原则
主键、外键、唯一约束,建议创建索引
排序列、分组列,建议创建索引
经常作为
where
条件查询的列,建议创建索引
4、删除
删除索引时,需要提供索引所在的表名。
使用示例
drop index idx_id_2 on t2;
5、验证
执行计划:RDBMS数据查询时,会先生成执行计划,然后按计划执行
索引需要结合执行计划、根据执行生成结果的时间进行综合评定。
面试题:何时索引无效
条件中有or
对于多列索引,不是使用的第一个,则不会使用索引like
查询以%
开头如果列类型是字符串,那一定要在条件中将数据用引号引用起来,否则不使用索引如果MySQL估计使用全表扫描比使用索引快,则不使用索引小表查询不会使用索引
…………………………
参考网址:/sc9018181134/article/details/78888022