MySQL索引视图

索引

索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引,MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),他们包含着对数据表里所有记录的引用指针,更通俗的说,数据库索引好比是一本书的目录,能加快数据库的查询速度。(注意:一般数据库默认都会为主键生成索引)

什么是索引

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

索引的原理
就是把无序的数据变成有序的查询
1、把创建的索引的列的内容进行排序
2、对排序结果生成倒排表
3、在倒排表内容上拼上数据地址链
4、在查询的时候,先拿到倒排表内容,再取出数据地址链,从来拿到具体数据

索引的优缺点

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

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

索引的分类

索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

MySQL的索引包括主键索引,普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

索引的设计原则

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

1、选择惟一性索引
2、为经常需要排序、分组和联合操作的字段建立索引
3、为常作为查询条件的字段建立索引
4、限制索引的数目
5、尽量使用数据量少的索引
6、尽量使用前缀来索引
7、删除不再使用或者很少使用的索引

创建索引

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。

创建索引有三种方式,这三种方式分别是
1、创建表的时候创建索引
2、在已经存在的表上创建索引
3、使用ALTER TABLE语句来创建索引
创建表的时候可以直接创建索引,这种方式最简单、方便。
语法:

CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],…属性名 数据类型[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY[别名](属性名1 [(长度)] [ASC | DESC])
);

普通索引

1、直接创建索引

CREATE INDEX index_name ON table(columns(length)

2、创建表的时候同时创建索引

Create table table_1(Id int,Name varchar(20),Sex boolean,index(id),
);

3、修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length)) USING BTREE;

4、查询某张表中索引情况

SHOW INDEX FROM table_name;

5、删除索引

DROP INDEX index_name ON table;

唯一性索引

Create table index2(Id int unique,Name varchar(20),Unique index index2_id(id asc)
);

全文索引

只能创建在char、varchar或text类型的字段上。

create table index3(Id int,Info varchar(20),Fulltext index index3_info(info)
);

多列索引

使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。
如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
也就是说多个单列索引与单个多列索引的查询效果不同,因为执行查询时,
MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

Create table index5(Id int,Name varchar(20),Sex char(4),Index index5_ns(name,sex)
);

空间索引

建空间索引时,表的存储引擎必须是myisam类型,而且索引字段必须有非空约束。空间数据类型包括geometry,point,linestring和polygon类型等。平时很少用到。

Create table index6(Id int,Space geometry not null,Spatial index index6_sp(space)
)engine=myisam;

CREATE INDEX

在已经存在的表上,可以直接为表上的一个或几个字段创建索引。基本形式如下:help create index

CREATE [UNIQUE | FULLTEXT |SPATIAL] INDEX 索引名 ON 表名 (属性名 [ (长度) ] [  ASC | DESC] );

1、创建普通索引

CREATE INDEX index_name ON table(column(length))

2、创建唯一性索引

CREATE UNIQUE INDEX indexName ON table(column(length))

3、创建全文索引

CREATE FULLTEXT INDEX index_content ON article(content)

4、创建单列数据

CREATE INDEX index3_name on index3 (name(10));

5、创建多列索引

CREATE INDEX index3_name on index3 (name(10),sex);

6、创建空间索引

CREATE SPATIAL INDEX index3_name on index3 (name(10));

ALTER TABLE

用ALTER TABLE语句来创建索引,也是存在表的情况下。
在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引。基本形式如下:

ALTER  TABLE 表名  ADD  [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX  索引名(属性名 [ (长度) ] [ ASC | DESC]);

1、创建普通索引

ALTER TABLE table_name ADD INDEX index_name (column(length))

2、创建唯一性索引

ALTER TABLE table_name ADD UNIQUE indexName (column(length))

3、创建全文索引

ALTER TABLE index3 add fulltext index index3_name(name);

4、创建单列数据

ALTER TABLE index3 add index index3_name(name(10));

5、创建多列索引

ALTER TABLE index3 add index index3_name(name(10),SEX);

6、创建空间索引

ALTER SPATIAL TABLE index3 add index index3_name(name(10));

删除索引

删除索引是指将表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。
对于这样的索引,应该将其删除。本节将详细讲解删除索引的方法。
对应已经存在的索引,可以通过DROP语句来删除索引。基本形式如下:

DROP  INDEX 索引名  ON 表名 ;

视图

什么是视图?

视图通过以定制的方式显示来自一个或多个表的数据
视图是一种数据库对象,用户可以像查询普通表一样查询视图
视图内其实没有存储任何数据,它只是对表的一个查询
视图的定义保存在数据字典内,创建视图所基于对表称为“基表”

为什么需要视图?

例如经常要对某些表进行连接查询,每次都要做表的连接,写同样的一串语句,过于繁琐,由此我们可以通过视图的方式来解决此问题。

视图的作用和优点

作用:
控制安全
保存查询数据
优点:
提供了灵活一致级别安全性。
隐藏了数据的复杂性
简化了用户的SQL指令
通过重命名列,从另一个角度提供数据

视图的使用规则

1、视图必须有唯一命名
2、在mysql中视图的数量没有限制
3、创建视图必须从管理员那里获得必要的权限
4、视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图
5、在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的ORDER BY。
6、视图不能索引,也不能关联触发器或默认值
7、视图可以和表同时使用

创建视图

语法:

CREATE [OR REPLACE] VIEW 视图名 [(alias[, alias]...)]--为视图字段指定别名 AS SELECT.........

例如:查询1号班级的所有学生信息、学号、姓名、电话、邮箱、班级名
步骤1:创建对应的SQL语句

SELECT
student.StudentNo,student.StudentName,student.Phone,student.Email,grade.GradeName
FROM student INNER JOIN grade ON student.GradeId = grade.GradeId
WHERE student.GradeId = 1

步骤2:创建目标视图

CREATE VIEW StudentMessage (学号,姓名,电话,邮箱,班级名)
AS SELECT student.StudentNo,student.StudentName,student.Phone,student.Email,grade.GradeName
FROM student INNER JOIN grade ON student.GradeId = grade.GradeId
WHERE student.GradeId = 1;

或者

CREATE OR REPLACE VIEW StudentMessage AS SELECT student.StudentNo,student.StudentName
FROM student INNER JOIN grade ON student.GradeId = grade.GradeId
WHERE student.GradeId = 1;

删除视图

DROP VIEW 视图名;

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用mp进行条件查询

在mp中进行条件查询发函数是selectList(); 使用上面的方式参数容易传错,所以可以使用下面的方式进行条件查询: 但是使用这种方式可能传的值为空 使用下面的方式可以避免这种情况发生 总结

PHP8中final关键字的应用-PHP8知识详解

在PHP8中,final的中文含义是最终的、最后的意思。被final修饰过的类和方法就是“最终的版本”。 如果关键字final放在类的前面,则表示该类不能被继承。 如果关键字final放在方法的前面,则表示该 方法不能被重新定义。 如果有一个类的格式为…

Ae 效果:CC Power Pin

扭曲/CC Power Pin Distort/CC Power Pin CC Power Pin (CC 强力边角定位)与同组内的边角定位 Corner Pin效果非常类似,常用于对源图像的透视扭曲变形和四点跟踪合成。使用 CC Power Pin 会有更多的调整属性和更直观的操作。 ◆ ◆ ◆ 效果…

接口自动化中如何完成接口加密与解密?

加密是一种限制对网络上传输数据的访问权的技术。将密文还原为原始明文的过程称为解密,它是加密的反向处理。在接口开发中使用加密、解密技术,可以防止机密数据被泄露或篡改。在接口自动化测试过程中,如果要验证加密接口响应值正确性的话&…

BGP服务器租用价格表_腾讯云PK阿里云

BGP云服务器像阿里云和腾讯云均是BGP多线网络,速度更快延迟更低,阿里云BGP服务器2核2G3M带宽优惠价格108元一年起,腾讯云BGP服务器2核2G3M带宽95元一年起,阿腾云分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格表如下&…

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。 1 LD1 (multiple structures) 将多个单元素结构加载到一个,两个,三个或四个寄存器上。该指令从内存中加载多个单元结构,并将结果写入一、二、三或四个 SIMD&FP 寄存器。 无偏移 一个寄存…

最短路径专题5 最短路径

题目: 样例: 输入 4 5 0 2 0 1 2 0 2 5 0 3 1 1 2 2 3 2 2 输出 3 0->3->2 思路: 根据题目意思,求最短路,这个根据平时的Dijkstra(堆优化)即可,关键在于求路径的方法&#x…

【Linux】[gdb]Linux环境下如何调试代码

一、code.c文件 我们首先创建一个code.c文件,写一段简单代码,用于测试。 二、makefile文件 然后,我们可以编写makefile文件,使得code.c文件能够进行编译。(当然也可以不写makefile文件,直接对code.c进行编…

大选择核网络在遥感目标检测中的应用

摘要 论文链接:https://arxiv.org/pdf/2303.09030.pdf 最近关于遥感目标检测的研究主要集中在改进有向边界框的表示,但忽略了遥感场景中呈现的独特先验知识。这种先验知识很有用,因为如果没有参考足够远的上下文,可能会错误地检测…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

😀前言 设计模式,作为软件工程领域的核心概念之一,向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码,而且也促进了代码的复用性。通过这篇文章,我们…

windows系统下pycharm配置anaconda

参考:超详细的PycharmAnconda安装配置教程_pycharm conda_罅隙的博客-CSDN博客 下载好anaconda安装后,比如我们安装在D盘anaconda文件夹下,在pycharm配置好环境激活时出现问题,可能是电脑没有配置环境变量 需要将一下4行添加到电…

axb_2019_brop64

axb_2019_brop64 Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)64位,只开了NX __int64 repeater() {size_t v1; // raxchar s[208]; // [rsp0h] [rbp-D0h] BYREFprintf("…

Qt扩展-QCustomPlot 用户交互

QCustomPlot 用户交互 一、概述二、操作范围三、选择机制1. 控制Graph的可选择性和选择状态2. 所选对象的外观3. 多部分对象4. 对选择变化做出反应 四、用户交互信号 一、概述 QCustomPlot提供了多个内置的用户交互。它们大致可以分为 通过用鼠标拖动和滚动鼠标滚轮进行范围操…

MySQL 性能优化

MySQL 性能优化 数据库命名规范 所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最…

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…

Ubuntu安装samba服务器

为了window系统下能够像访问本地目录一样访问ubuntu系统下的目录&#xff0c;这里我通过安装samba服务器&#xff0c;将ubuntu系统的文件目录通过网络挂载的方式共享出来&#xff0c;以便在window下就能够对ubuntu系统的文件进行读写等访问操作&#xff0c;这里记录一下samba服…

SpringBoot快速入门

搭建SpringBoot工程&#xff0c;定义hello方法&#xff0c;返回“Hello SpringBoot” ②导入springboot工程需要继承的父工程&#xff1b;以及web开发的起步依赖。 ③编写Controller ④引导类就是SpringBoot项目的一个入口。 写注解写main方法调用run方法 快速构建SpringBoo…

Redis分页+多条件模糊查询组合实现思路

Redis是一个高效的内存数据库&#xff0c;它支持包括String、List、Set、SortedSet和Hash等数据类型的存储&#xff0c;在Redis中通常根据数据的key查询其value值&#xff0c;Redis没有模糊条件查询&#xff0c;在面对一些需要分页、排序以及条件查询的场景时(如评论&#xff0…

MyCat实现分库分表技术

目录 一、分库分表 1.1介绍 1.1.1问题分析 1.1.2拆分策略 1.1.3垂直拆分 1.1.3.1垂直分库 1.1.3.2垂直分表 1.1.4水平拆分 1.1.4.1水平分库 1.1.4.2水平分表 1.1.5实现技术 二、MyCat概述 2.1介绍 2.2下载 2.3安装 2.4目录介绍 2.5概念介绍 三、MyCat入门 3.…

MyBatisPlus(八)范围查询

说明 范围查询&#xff0c;包括&#xff1a; 大于大于等于小于小于等于在范围内在范围外 大于&#xff1a;gt 代码 Testvoid gt() {LambdaQueryWrapper<User> wrapper new LambdaQueryWrapper<>();wrapper.gt(User::getAge, 20);List<User> users mapp…