《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·011【视图和索引】

一、视图

1、介绍

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。

2、作用

为什么要使用视图?

  1. 定制用户数据,聚焦特定数据

    同一份数据,不同用户最终的要求不一样,如班主任、授课老师等,他们的关注点往往不同。

  2. 封装复杂查询,简化开发

    几百张表连接查询,语句复杂,封装成视图后,仅一条语句搞定。

  3. 保护敏感数据

    通过视图对外公开数据,不允许访问基表,保护基表数据。

    比如:药品的实际进价 → \to 药品的公开进价 → \to 加点 150 150 150% → \to 药品的销售价格

  4. 组合分散数据,创建视图分区

    数据量巨大 → \to 分库、分表(一张表数据可能存储在不同的数据库中)

    最终汇总数据时,需要提取所有数据库中所有相同表的数据,可以用关键字union实现。

  5. 列名中文化

    不推荐使用视图实现,一般交给前端程序员实现。

3、使用示例

-- 查看部门编号为10的所有员工信息
create view empvu10
as
	select empno, ename, job
	from emp
	where deptno = 10;
-- 查看视图的表结构
desc empvu10;
-- 查询视图数据
select * from empvu10;

-- 给视图列取别名方法一
create view v_dept_sum_avg
as
	select dname name, min(sal) minsal, max(sal) maxsal, avg(sal) avgsal
	from emp e, dept d
	where e.deptno = d.deptno
	group by dname;
-- 给视图列取别名方法二(推荐)
create view v_dept_sum_avg
	(name, minsal, maxsal, avgsal)
as
	select dname, min(sal), max(sal), avg(sal)
	from emp e, dept d
	where e.deptno = d.deptno
	group 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_2
on t2(id asc);

注意点

  1. 尽可能重复少的列,多列时重复少的列在前

  2. text(char / varchar)全文索引

  3. 像身份证这种唯一的字段,MySQL中是通过唯一索引来维护的,这与其他数据库不同

  4. 索引创建原则

    主键、外键、唯一约束,建议创建索引


    排序列、分组列,建议创建索引


    经常作为where条件查询的列,建议创建索引

4、删除

删除索引时,需要提供索引所在的表名。

使用示例

drop index idx_id_2 on t2;

5、验证

执行计划:RDBMS数据查询时,会先生成执行计划,然后按计划执行

索引需要结合执行计划、根据执行生成结果的时间进行综合评定。

面试题:何时索引无效

  1. 条件中有or
  2. 对于多列索引,不是使用的第一个,则不会使用索引
  3. like查询以%开头
  4. 如果列类型是字符串,那一定要在条件中将数据用引号引用起来,否则不使用索引
  5. 如果MySQL估计使用全表扫描比使用索引快,则不使用索引
  6. 小表查询不会使用索引
    …………………………

参考网址:https://blog.csdn.net/sc9018181134/article/details/78888022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God-Excious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值