MySQL中的视图与索引

目录

一、视图

1.1 什么是视图

1.2 为什么要使用视图

1.3 视图的作用与特点

1.4 视图的创建

1.5 视图的使用规则

1.6 视图的修改与删除

修改:

删除:

二、索引

2.1 什么是索引

索引的原理:

2.2 索引的优缺点

2.2.1 索引的优点:

2.2.2 索引的缺点:

2.3 索引的分类

2.4 索引设计原则

2.5 创建索引与删除索引

2.5.1 创建索引

2.5.2 删除索引

2.6 索引的优化

2.7 聚餐索引和非聚簇索引

2.7.1 非聚簇索引

2.7.2 聚簇索引


一、视图

1.1 什么是视图

1,视图通过定制的方式显示来自一个表或多个表的数据;

2,视图的本质是数据库对象,如果成功的创建了视图,用户可以像操作普通表一样查询甚至修改视图内的数据;

3,视图的本身是没有任何的数据的 ,它只是对表的一个查询结果进行了实体化的反馈;

4,有关于视图所有的定义,保存在数据字典内,创建视图所基于的表称为"基表"。

1.2 为什么要使用视图

例如经常要对 student和grade表进行连接查询,每次都要做冗余的连接,才能完成后续的检索或分析过于麻烦。同时对于一些私密的信息,并不想让其他的操作人访问,我们就可以实现准备好一个定制化的视图供他去使用。

1.3 视图的作用与特点

作用:

1、保存查询数据

2、控制安全

优点:

1、提供了灵活一致级别的安全性

2、隐藏了数据原有的复杂性

3、简化了用户对于SQL指令的编辑

4、通过重命名列,从另一角度提供数据

1.4 视图的创建

#语法:CREATE [OR REPLACE] VIEW 视图名[别名1,别名2,.....]AS 必要的查询语句[额外的声明 ===>  WITH READ ONLY];
#如:创建视图,Student_V_1 包含了一号班级编号的所有学生的学号 姓名 班级名称 生日 住址
CREATE VIEW Student_V_1
AS SELECT student.StudentNo,student.StudentName,grade.GradeName,student.BornDate,student.Address
FROM student INNER JOIN grade ON student.GradeID = grade.GradeID
WHERE student.GradeID = 1;CREATE VIEW Student_V_2
(学号,姓名,班级名,生日,邮箱)
AS SELECT student.StudentNo,student.StudentName,grade.GradeName,student.BornDate,student.Address
FROM student INNER JOIN grade ON student.GradeID = grade.GradeID
WHERE student.GradeID = 1;#查询当前数据库内所有的视图
SHOW FULL TABLES WHERE Table_type = 'VIEW';	

1.5 视图的使用规则

1、视图必须有唯一命名

2、mysql中对于视图的数量没有限制

3、创建视图的权限,必须要进行授权

4、视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新视图

5、视图内支持分组查和排序查,但是会覆盖掉原有的排序或分组机制

6、视图不能创建索引,也不能关联触发器

7、视图和表可以出现在同一查询语境内

1.6 视图的修改与删除

修改:

#如替换原有视图信息
CREATE OR REPLACE Student_V_1
.......................
#比如XXX人创建视图时Email赋值赋的是生日 通过ALTER关键字可以实现视图中字段值的重新赋予
ALTER VIEW Student_V_1
(Email)
AS SELECT Email 
FROM student;#注意一下
ALTER VIEW Student_V_1
(Email)
AS SELECT Email 
FROM student;ALTER VIEW Student_V_2
(邮箱)
AS SELECT student.Email
FROM student INNER JOIN grade ON student.GradeID = grade.GradeID
WHERE student.GradeID = 1;

删除:

xxxxxxxxxx DROP VIEW 视图名;

二、索引

2.1 什么是索引

        索引是一种很特殊的数据库结构,可以用来快速查询数据库表中的特定记录。它也是提高数据库性能的重要手段。从理论上分析,在MySql中,所有的数据类型,都可以被索引。常见的索引:普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

模式(schema)中的一个数据库对象
在数据库中用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
与表独立存放,但不能独立存在,必须属于某个表
由数据库自动维护,表被删除时,该表上的索引自动被删除。
索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。

索引的原理:

将无序的数据变成有序的查询

1:把创建了索引的列的内容进行排序

2:对排序的结果生成相应的倒排表

3:在倒排表的内容上拼上数据地址链

4:在进行查询的时候,先拿到倒排表内容,再取出数据地址链,从而得到具体的数据

2.2 索引的优缺点

2.2.1 索引的优点:

是可以提高检索数据的速度,这是创建索引的最主要的原因。对于有依赖关系的子表和父表之间的 联合查询时,可以提高查询速度。使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。

2.2.2 索引的缺点:

是创建和维护索引需要耗费时间;耗费时间的数量随着数据量的增加而增加;索引需要占用物理空 间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了。

2.3 索引的分类

索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了。

聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快

常见的索引:普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

2.4 索引设计原则

为了使索引的使用效率更高,在创建索引的时候必须考虑在哪些字段上创建索引和创建什么类型的索引。

1、尽量去选择唯一性索引。

2、为经常需要去排序、分组、联合操作的字段建立索引。

3、为经常作为查询条件的字段建立索引。

4、索引并不是越多越好,严格限制索引的数目。

5、尽量使用数据量小的索引。

6、及时的去删除一些使用很少或不再使用的索引。

2.5 创建索引与删除索引

2.5.1 创建索引

有三种方式创建索引:创建表的时候(声明字段)时创建索引,在已经存在的表上创建索引,在使用ALTER TABLE语句来创建索引。

创建表的时候可以直接创建索引,这种方式是最为简单和方便的,语法如下:
CREATE TABLE 表名(字段名  字段类型 [约束条件]字段名  字段类型 [约束条件]字段名  字段类型 [约束条件]    [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY[别名](属性名1 [(长度)] [ASC | DESC])
);#示例1:创建表的时候创建索引
CREATE TABLE index1(id INT,name VARCHAR(20),Sex BOOLEAN,INDEX(id)
);#修改表结构的方式添加索引
ALTER TABLE 表名 ADD INDEX 索引名(字段名);#查询某表内索引的使用情况
SHOW INDEX FROM 表名;#删除索引
DROP INDEX 索引名 ON 表名;#示例2:创建唯一性索引
CREATE TABLE index2(id INT unique,           name VARCHAR(20),Unique INDEX index2_id(id asc)    
);
ALTER TABLE index2 ADD INDEX index2_name(name);#示例3:创建单列索引
CREATE TABLE index3(id int,Subject varchar(30),INDEX index3_st(subject(10))
); #示例4:创建多列索引
CREATE TABLE index4(id int,name VARCHAR(20),sex CHAR(4),INDEX index4_ns(name,sex)
);
#使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。
#如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
#也就是说多个单列索引与单个多列索引的查询效果不同,因为执行查询时,
#MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。#还可以通过 CREATE INDEX 去创建索引
#首先要保证已经存在表,才能够使用这个命令去创建索引.
#在已经存在的表上,可以直接为表上的一个或几个字段创建索引。
CREATE [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX 索引名 ON 表名 (属性名 [ (长度) ] [  ASC | DESC] );
CREATE TABLE index5(id int,name VARCHAR(20),sex CHAR(4)
);#为 name 字段创建普通索引
CREATE [ UNIQUE | FULLTEXT ] INDEX index5_name ON index5 (name(10));#还可以通过ALTER TABLE语句创建索引
首先要保证已经存在表,才能够使用这个命令去创建索引.
ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (属性名 [ (长度) ] [  ASC | DESC] );
CREATE TABLE index6(id int,name VARCHAR(20),sex CHAR(4)
);
ALTER TABLE index6 ADD INDEX index6_name (name(10));

2.5.2 删除索引

一些不再使用的索引会降低表的更新速度,影响数据库的性能,就需要我们进行删除。

语法格式;
DROP INDEX 索引名 ON 表名;

2.6 索引的优化

我们要再合适的场景下选择合适的索引来进行查询:

动作描述使用聚簇索引使用非聚簇索引
列经常被分组查询11
返回某范围内的数据10
一个或极少的范围值00
小数目的不同值10
大数目的不同值01
频繁更换的列00
外键列11
主键列11
频繁修改的列00.5

2.7 聚餐索引和非聚簇索引

2.7.1 非聚簇索引

索引节点的叶子页面就好比一片叶子,叶子头便是索引键值;利用索引,要先在索引树中快速检索到 id,但是要想取到id对应行数据,必须找到该行数据在硬盘中的存储位置;因此MYISAM引擎的索引,叶子页面上不仅存储了主键id 还存储着数据存储的地址信息,像这样的索引就称为非聚簇索引。它的二级索引与主键索引类似。

2.7.2 聚簇索引

对于非聚簇索引来说,每次通过索引检索到所需行号后,还需要通过叶子上的磁盘地址去磁盘内取数据(回行)消耗时间。为了优化这部分回行取数据时间,InnoDB 引擎采用了聚簇索引。

聚簇索引,即将数据存入索引叶子页面上。对于 InnoDB 引擎来说,叶子页面不再存该行对应的地址,而是直接存储数据,这样就可以避免回行操作所带来的时间消耗。

关于查询时间,一般认为 MyISAM 牺牲了功能换取了性能,查询更快。但事实并不一定如此。多数情况下,MyISAM 确实比 InnoDB 查的快 。但是查询时间受多方面因素影响。InnoDB 查询变慢得原因是因为支持事务、回滚等等,使得 InnoDB的叶子页面实际上还包含有事务id(换句话说就是版本号) 以及回滚指针。

在二级索引方面 InnoDB与MyISAM 有很大的区别,InnoDB默认对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈智慧消防在铁路系统中的应用与发展

摘要:文章从基于物联网技术的“智慧消防”概念入手,探讨了智慧消防物联网技术在铁路工程中的应用,分析了在实际应用过程中存在的部分难点,并提出了新型物联网无线组网、智能传感器技术、图形可视化技术及安全隐患预测与评估的技术…

C# JSON序列化、反序列化

在 C# 中,你可以使用 Newtonsoft.Json 库(也称为 Json.NET)来进行 JSON 的序列化和反序列化。下面是一个简单的示例: using Newtonsoft.Json; using System;public class Person {public string Name { get; set; }public int Ag…

MongoDB的索引与索引字段的顺序

想提高数据库的查询效率需要建立索引,用索引查询。使用索引查询和不使用索引查询提升的效率和数据库表的记录条数和调用此时有关系。若记录足够大,用索引查询和不用索引查询相差一千倍以上很正常。 MongoDB默认为主键字段_id创建唯一索引,这个…

寒假作业2月2号

第一章 命名空间 一.选择题 1、编写C程序一般需经过的几个步骤依次是(C ) A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数据有关…

python 爬虫篇(1)---->re正则的详细讲解(附带演示代码)

re正则的详细讲解 文章目录 re正则的详细讲解前言4.re正则表达式(1)e正则的匹配模式(2) re.search 的使用(3)re.findall()的使用(4)re.sub()的使用结语前言 大家好,今天我将开始更新python爬虫篇,陆续更新几种解析数据的方法,例如 re正则表达式beautifulsoup xpath lxml 等等,…

情人节送什么好?情人节送什么数码礼物?这总有你喜欢的那款!

​情人节礼物选择繁多,但许多人钟爱数码产品。以下是我为您精心挑选的几款实用且深受男女生喜爱的数码产品。它们不仅功能出色,还能为您的节日增添一份特别的惊喜。 一、南卡OE MIX蓝牙耳机 南卡OE MIX无疑是在情人节礼物预算千元以内的首选。它配备了重…

代码随想录算法训练营第二十四天|77. 组合

77. 组合 回溯法&#xff1a; public class Solution {List<IList<int>> resultnew List<IList<int>>();List<int> pathnew List<int>();public IList<IList<int>> Combine(int n, int k) {backtracking(n,k,1);return resu…

文旅行业解决方案

顶层规划设计 系统化地为目的地、政府、景区、游客等提供基于全流程服务和管理的智慧文旅应用体系 智慧产品矩阵 整合腾讯产品矩阵和先进技术&#xff0c;持续研发创新产品&#xff0c;实现各文旅场景智慧化及产业协同式发展 文创孵化平台 用科技文化助力中华文明复兴&…

MySQL的ACID、死锁、MVCC问题

1 ACID ACID代表原子性&#xff08;atomicity&#xff09;、一致性&#xff08;consistency&#xff09;、隔离性&#xff08;isolation&#xff09;和持久性&#xff08;durability&#xff09;。一个确保数据安全的事务处理系统&#xff0c;必须满足这些密切相关的标准。 原…

【Spring实战】33 Spring Boot3 集成 Nacos 配置中心

文章目录 1. 配置中心定义2. 解决哪些问题3. 常用的配置中心4. 使用示例1&#xff09;没引入 Nacos 配置中心2&#xff09;引入依赖3&#xff09;配置Nacos连接信息4&#xff09;在 Nacos 上配置属性5&#xff09;在 Spring Boot 中使用配置6&#xff09;启动服务&验证7&am…

spring boot学习第九篇:操作mongo的集合和集合中的数据

1、安装好了Mongodb 参考&#xff1a;ubuntu安装mongod、配置用户访问、添删改查-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns…

奠定基础:用于机器学习的微积分、数学和线性代数

一、说明 机器学习是一个引人入胜的领域&#xff0c;它使计算机能够从数据中学习并做出预测或决策&#xff0c;而无需明确编程。然而&#xff0c;在幕后&#xff0c;有一个坚实的数学和线性代数基础&#xff0c;构成了机器学习算法的支柱。在本文中&#xff0c;我们将探讨在深入…

Mybatis 批量插入数据 SQL

温故而知新&#xff0c;这里记录一下 案例1 批量插入时&#xff0c;xxxMapper.java 中方法的参数都必须是 List &#xff0c;泛型可以是 bean &#xff0c;也可以是 Map 。配合使用 mybatis 的 foreach 即可。示例如下&#xff1a; public Integer batchInsertDemo(List<D…

vue 项目涉及的焦点聚焦、格式化日期、判断是否为对象或数组、判断是否为空、深拷贝、节流、防抖

焦点聚焦 import Vue from vue // 插件对象(必须有 install 方法, 才可以注入到 Vue.use 中) export default {install () {Vue.directive(fofo, {inserted (el) {el el.querySelector(input)el.focus()}})} }格式化日期格式 export const formatDate (time) > {// 将xx…

GPT-4成为职场得力助手

在这个快节奏的时代&#xff0c;工作效率和创新能力成为了职场竞争的关键。幸运的是&#xff0c;随着人工智能的发展&#xff0c;我们现在有了一个强大的新伙伴——GPT-4。这不仅是一个简单的工具&#xff0c;而是一个能够与我们对话、帮助我们解决问题的智能助手。那么&#x…

C++多线程3

生产者消费者模型 OS经典问题&#xff0c;生产者消费者模型,empty和full还有mutex对应到C上如何处理看代码即可 #include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <queue> using namespace st…

数据中心机房建设的关键痛点及解决方案

随着信息技术的飞速发展&#xff0c;数据中心机房已成为企业信息系统的核心。然而&#xff0c;在机房系统的建设过程中&#xff0c;投资及运行维护成为项目管理的关键痛点。合理的投资决策和高效的运维管理是确保机房系统经济性和可靠性的重要因素。本文将探讨机房系统建设的投…

那些不输于乙游男主人设的国漫男主

最近乙游的势头越来越猛&#xff0c;新宠旧爱一起上阵&#xff0c;叫人应接不暇。在二次元的世界里&#xff0c;乙游男主们凭借着超凡的魅力&#xff0c;成为了无数少女心中的理想对象。他们或冷酷、或温柔、或阳光、或神秘&#xff0c;每一个角色都有着独特的性格和故事。 乙游…

NLP_统计语言模型的发展历程

文章目录 统计语言模型发展的里程碑&#xff1a; 上半部分是语言模型技术的进展&#xff1b;下半部分则是词向量&#xff08;词的表示学习&#xff09;技术的发展。其中&#xff0c;词向量表示的学习为语言模型提供了更高质量的输入信息&#xff08;词向量表示&#xff09; 1…

性能测试常用术语

之前在性能测试过程中&#xff0c;对于某些其中的术语一知半解&#xff0c;导致踩了很多坑。这篇博客&#xff0c;就常见的一些性能测试术语进行一次浅析。。。 负载 对被测系统不断施加压力&#xff0c;直到性能指标超过预期或某项资源使用达到饱和&#xff0c;以验证系统的处…