Mysql之视图、索引【第五篇】
创始人
2024-01-25 15:36:24

大纲:

一、视图

        1、什么是视图?

   1) MySQL 视图(View)是一种虚拟的表,是从数据库中一个或多个表中导出来的表。视图由列和行构成,行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
   2) 数据库中存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。
   3) 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

        2、视图的作用

   1) 使操作简便化。
   2) 增加数据的安全性。
   3) 提高表的逻辑独立性。

        3、视图的优点

1) 定制用户数据,聚焦特定的数据

 在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。

例如,当数据库同时存在时,如学生信息表、课程表和教师表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。

2) 简化数据操作

在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。

3) 提高数据的安全性

视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。

4) 共享所需数据

通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

5) 更改数据格式

通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

6) 重用 SQL 语句

视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。


案例:

视图

      1、基本语法【创建视图】:CREATE VIEW 视图名 AS SELECT 语句;

语法说明如下:

1.<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。

2.:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

      2、查看视图:DESCRIBE 视图名;(DESC 视图名;

      3、修改视图:ALTER VIEW <视图名> AS

      4、删除视图: drop view 视图名;

-- 视图的作用
--  1) 使操作简便化。
--  2) 增加数据的安全性。
--  3) 提高表的逻辑独立性。#在数据库中,视图只是多张表之间的连接查询的定义;并不是一张真实表,而是一张虚拟表,当你在运行这个定义的时候才会从原表中抽取数据#视图语法:CREATE VIEW 视图名 AS SELECT 语句;
#1060 - Duplicate column name 'tid' 出现多个字段
#连表查询
create view v_student_score as
select s.*,sc.score,c.*,t.tname from t_teacher t,t_course c,
t_score sc,t_student s
where t.tid=c.tid and c.tid=sc.cid and sc.sid=s.sid;#查询视图
select * from v_student_score;
#删除视图
-- drop view 视图名;

二、索引

        1、什么是索引?

索引是一种特殊的数据库结构, 索引是由数据库表中一列或多列组合而成,其作用是提高对表中数据的查询速度。类似于图书的目录,方便快速定位,寻找指定的内容。

        2、为什么要使用索引?

索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。

在 MySQL 中,通常有两种方式访问数据库表的行数据:

1) 顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。
顺序访问实现比较简单,但当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量时间,显然会影响数据库的处理性能。

2) 索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。
使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。

        3、索引的优缺点

优点:

  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
  • 可给所有的 MySQL 列类型设置索引。
  • 可加快数据的查询速度,这是使用索引最主要的原因。
  • 在实现数据的参考完整性方面可以加速表与表之间的连接。
  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

缺点:

  • 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
  • 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

简单来说就是:

         优点:提高查询数据的速度。
         缺点:创建和维护索引的时间增加了,同时占用硬盘空间。

        4、索引的分类

   1) 普通索引:是最基本的索引,它没有任何限制;

   2) 唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;

   3) 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

   4) 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

   5) 全文索引:使用FULLTEXT参数可以设置,全文索引只能创建CHAR,VARCHAR,TEXT类型的字段上。主要作用是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持;mysql5.7+

-- 1.创建索引
-- CREATE [UNIQUE|FULLTEXT] INDEX 索引名 ON 表名(字段名[(长度)][ASC|DESC])
-- 2.修改索引
-- ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT] INDEX 索引名(字段名[(长度)][ASC|DESC])
-- 3.删除索引: DROP INDEX 索引名 ON 表名

案例:

#------------------------------------
CREATE TABLE t_log(id varchar(32) NOT NULL COMMENT '唯一标识',ip varchar(15) NOT NULL COMMENT 'IP地址',userid varchar(32) NOT NULL COMMENT '用户ID',moduleid varchar(32) NOT NULL COMMENT '模块ID',content varchar(500) NOT NULL COMMENT '日志内容',createdate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',url varchar(100) DEFAULT NULL COMMENT '请求URL地址',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;#查询表t_log
select * from t_log;
select count(0) from t_log;#索引是用于提高查询效率的
-- 索引分类(100408)
-- 1) 普通索引:是最基本的索引,它没有任何限制;
-- 未建立索引之前:0.146s
select * from t_log where moduleid='100408';
-- 在建立索引之后:0s
create index idx_moduleid on t_log(moduleid); #1.383s
#删除索引
drop index idx_moduleid on t_log;-- 2)  唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
#1061 - Duplicate key name 'idx_moduleid' 有重复数据(值)
create unique index idx_moduleid on t_log(moduleid); -- 3) 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
select * from t_log where id='00d3f9ffca154dd9aa280916ac538019';-- 4) 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
#explain:【执行计划】检测是否走索引(排查sql语句是否走索引)
drop index idx_userid_moduleid_createdate on t_log;create index idx_userid_moduleid_createdate on t_log(userid,moduleid,createdate);#满足
explain select * from t_log where userid='';
explain select * from t_log where userid='ef2f16a90e4311e99f0128d24413c295' and moduleid='100408';
explain select * from t_log where userid='' and moduleid='' and createdate='';#不满足
explain select * from t_log where moduleid='100408';-- 5) 全文索引:使用FULLTEXT参数可以设置,全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上。主要作用是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持;mysql5.7+

添加总数据:

创建索引之前:

创建索引之后: 

 explain:【执行计划】检测是否走索引(排查sql语句是否走索引)

key为空,代表没有走索引

 

key有值,代表走了索引

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
超纤皮是什么皮 超纤皮好不好 相信大家买车的时候,很多人都会选择皮座椅,因为不但有档次,而且手感也会比织物的好。但是大家想过没有,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
超纤皮是什么皮 超纤皮好不好 相信大家买车的时候,很多人都会选择皮座椅,因为不但有档次,而且手感也会比织物的好。但是大家想过没有,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...