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.mzph.cn/news/94670.shtml

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

相关文章

CSS3与HTML5

box-sizing content-box:默认,宽高包不含边框和内边距 border-box:也叫怪异盒子,宽高包含边框和内边距 动画:移动translate,旋转、transform等等 走马灯:利用动画实现animation:from…

雷达编程实战之提高探测速度

有效帧频率作为雷达一个非常核心的指标,它代表了雷达探测识别的速度,速度越快,后级各项智能驾驶功能就能得到更快、更有效的判断。本篇文章首先从硬件的角度,提供了一种合理利用片上资源提高探测识别速度的常用方法,然…

LCR 069.山峰数组的峰顶索引

​​题目来源: leetcode题目,网址:LCR 069. 山脉数组的峰顶索引 - 力扣(LeetCode) 解题思路: 二分查找即可。 解题代码: class Solution {public int peakIndexInMountainArray(int[] arr) {…

SSL/TLS介绍以及wireshark抓包TLS Handshake报文

文章目录 1.概念1.1 SSL/TLS发展历史1.2 TLS两个阶段1.3 TLS报文头 2.TLS Handshake2.1 Handshake具体过程2.1.1 单向认证和双向认证2.1.2 复用TLS协商结果Session Identifier(会话标识符)Session Ticket(会话票据) 2.2 Handshake…

基于j2ee的交通管理信息系统/交通管理系统

摘 要 随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如交通管理这一方面,利用网络已经逐步进入人们的生活。传统的交通管理,都是工作人员线下手工统计,这种传统方式局限性比较大且花费较多。计…

解决caffe中的python环境安装的问题(补充)

上一篇(解决caffe中的python环境安装的问题_qiuchangyong的博客-CSDN博客)说到了安装过程中遇到的常见问题,其实还有一个忘了补充,就是在执行命令"sudo python -m pip install -r requirements.txt"后,出现p…

全志ARM926 Melis2.0系统的开发指引①

全志ARM926 Melis2.0系统的开发指引① 1. 编写目的2. Melis2.0 系统概述3. Melis2.0 快速开发3.1. Melis2.0 SDK 目录结构3.2. Melis2.0 编译环境3.3. Melis2.0 固件打包3.4. Melis2.0 固件烧录3.5.串口打印信息3.6. Melis2.0 添加和调用一个模块3.6.1. 为什么划分模块&#xf…

Python中Lambda用法

在Python中,lambda函数是一种形式较短的函数,又称为匿名函数。与正常的函数不同,lambda函数没有名称,因此只能在定义时直接传递给其他函数或变量使用,而不能单独调用。 lambda函数的语法非常简单,格式如下…

Python中print()打印如何不换行?

文章目录 Python中print()打印如何不换行python2.xpython3.x print()函数语法objects基本语法sep基本语法end基本语法 Python中print()打印如何不换行 print() 函数用于打印输出,是python中最常见的一个内置函数。 如何在Python中打印两个或多个变量、语句时而不进…

软件或游戏提示msvcp120.dll丢失的5种常用解决方法,msvcp120.dll文件全面解析

在当今数字化的时代,我们的生活已经离不开各种软件和游戏。然而,有时候我们可能会遇到一些技术问题,比如“软件或游戏提示msvcp120.dll丢失”。这个问题对于许多人来说可能很棘手,但是只要掌握了正确的解决方法,就能轻…

【现代机器人学】学习笔记十四:中文版印刷/翻译勘误

首先声明,这个印刷/勘误并非经过官方的认可,只是我个人的粗浅的理解。如果内容有误,恳请大家谅解指正。 其实有的并不算错,只是我个人认为不太准确,在我学习过程中产生了一些小疑惑和误解。 都是一些小毛病&#xff…

OpenCV 14(角点特征Harris和Shi-Tomasi)

一、角点 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路…

Redisson—分布式对象

每个Redisson对象实例都会有一个与之对应的Redis数据实例,可以通过调用getName方法来取得Redis数据实例的名称(key)。 RMap map redisson.getMap("mymap"); map.getName(); // mymap 所有与Redis key相关的操作都归纳在RKeys这…

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测|Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…

微信小程序button按钮去除边框去除背景色

button边框 去除button边框 在button上添加plain“true”在css中添加button.avatar-wrapper {background: none}用于去除button背景色在css中添加button.avatar-wrapper[plain]{ border:0 }用于去除button边框

机器学习——KNN算法流程详解(以iris为例)

、 目 录 前情说明 问题陈述 数据说明 KNN算法流程概述 代码实现 运行结果 基于可视化的改进 可视化代码 全部数据可视化总览 分类投票结果 改进后最终代码 前情说明 本书基于《特征工程入门与入门与实践》庄家盛 译版P53页K最近邻(KNN)算…

《C和指针》笔记33:指针数组

除了创建整型数组一样,也可以声明指针数组。 int *api[10];为了弄清这个复杂的声明,我们假定它是一个表达式,并对它进行求值。下标引用的优先级高于间接访问,所以在这个表达式中,首先执行下标引用。因此,a…

兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮

区块链本身不仅崇尚去中心化,同时也崇尚公开透明,虽然这正在让 DAO 治理等变得更加公平,但它同时也是一把双刃剑,个人交易者尤其是一些巨鲸交易者的所以链上交易都被公之于众,这似乎并不是他们想要的结果。 所以从加密…