1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·011【视图和索引】

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

时间:2019-07-21 21:01:50

相关推荐

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

文章目录

一、视图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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。