MySQL索引与视图详解

 更新时间:2025年12月01日 09:37:12   作者:霍理迪  
MySQL中的索引类似于书籍的目录,用于提高数据查询效率,视图是一种虚拟表,可以提高数据的安全性,并简化查询语句,索引可以提高查询效率,但会占用磁盘空间,视图可以保障数据的安全性,隐藏底层列名,并提供逻辑数据独立性,感兴趣的朋友跟随小编一起看看吧

在MySQL中,索引类似于书籍的目录,如果想要快速访问数据表中的特定信息,可以建立索引加快数据查询效率。

使用数据库时,不仅需要提高对数据的查询效率,也需要考虑数据的安全问题。在MySQL中可以创建一种叫作视图的虚拟表,让使用视图的用户只能访问被允许访问的结果集,从而提高数据的安全性。除了安全性,视图还具备简化查询语句和逻辑数据独立性等优点。

在数据库查询数据时,默认是对全表的数据进行扫描,在项目开发中,MySQL的一张表可能就有千万条数据,多张表组合甚至有上亿条数据。这样查询一条数据的效率实在是太低了,因此我们引入了索引,索引是数据库中为提高数据查询效率而常用的数据库对象,它好比新华字典的音序表,通过音序表可以快速地查找内容。索引在数据表中一列或多列的值与记录行之间按照一定的顺序建立关系,以提高对数据表中数据的查询速度。

索引按照实现语法的不同大致分为五种(可以放一起写,这里每个字段分开展示)

1、主键索引

主键索引是一种特殊的唯一性索引,用于根据主键自身的唯一性标识每一条记录。主键索引的字段不允许有NULL值。

CREATE TABLE dept_index(
id INT
PRIMARY KEY (INT)
);

2、唯一性索引

创建唯一性索引的字段允许有NULL值,但需要保证索引对应字段中的值是唯一的。

CREATE TABLE dept_index(
deptno INT
UNIQUE INDEX (deptno)-- INDEX和KEY可以互相替换
);

3、普通索引

普通索引是MySQL中的基本索引类型,使用KEY或INDEX定义,不需要添加任何限制条件

CREATE TABLE dept_index(
dname VARCHAR(50)
INDEX (dname));

4、全文索引

全文索引主要用于提高在数据量较大的字段中的查询效率。全文索引和SQL中给的LIKE模糊查询类似,不同的是LIKE模糊查询适用于在内容较少的文本中进行模糊匹配,全文检索更擅长在大量的文本中进行数据检索。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。

CREATE TABLE dept_index(
introduction VARCHAR(200)
FULLTEXT (introduction));

5、空间索引

空间索引只能创建在空间数据类型的字段上。空间数据类型存储的空间数据是指含有位置、大小、形状以及自身分布特征等多方面信息的数据。MySQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON

对于创建空间索引的字段,必须将其声明为NOT NULL

CREATE TABLE dept_index(
address GEOMETRY NOT NULL SRID 4326
SPATIAL INDEX (address)
);

上述都属于单列索引,还存在复合索引如下

CREATE TABLE index_multi(
id INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
score FLOAT,
INDEX multi(id,NAME)
);

可以在创建表之后建立索引

CREATE UNIQUE INDEX unique_id ON dept_index02(id);

也可以通过修改表的形式添加索引

ALTER TABLE dept_index03 ADD UNIQUE INDEX index_id(id);-- index_id是起的索引名 

查看添加的索引

SHOW INDEX FROM dept_index;

删除索引(两种方式任选)

1、ALTER TABLE dept_index DROP INDEX introduction;-- 想多删就在introduction索引后面加

2、DROP INDEX dname ON dept_index;-- 删除数据表dept_index中名称为dname的索引

注意:虽然索引可以提高数据的查询效率,但它会占用一定的磁盘空间,并且在创建和维护索引时,其消耗的时间是随着数据量的增加而增加的。因此,使用索引时,应该综合考虑其优点和缺点

视图的作用及意义

在实际开发中,有时候为了保障数据的安全性和提高查询效率,希望创建一个只包含指定字段数据的虚拟表给用户使用,此时可以使用视图。视图在数据库中的作用类似于窗户,用户通过这个窗户只能看到指定的数据。视图本身不存储数据,它只是一个保存下来的 SELECT 语句,每次查询视图时,数据库会执行这个 SELECT 语句,从底层表中取出数据。

特点有下面三个

简化查询语句:比如日常开发需要经常使用一个比较复杂的语句进行查询,此时就可以将该查询语句定义为视图,从而避免大量重复且复杂的操作

安全性:可以从数据库指定字段给别人看,防止敏感信息泄露。还可以改视图列名,隐藏底层列名

逻辑数据独立性 :数据表增加字段不会影响基于该数据表查询出数据的视图(不改视图本身,视图就不会变)

1、基于单表创建视图

CREATE VIEW view_emp AS SELECT empno,ename,job,deptno FROM emp;

2、查看视图

SELECT * FROM view_emp;

指定视图中字段的名称,并创建

CREATE VIEW view_emp2(e_empno,e_ename,e_job,e_deptno) AS SELECT empno,ename,job,deptno FROM emp; 

3、基于多表创建视图

CREATE VIEW view_emp_dept
AS 
SELECT e.empno,e.ename,e.job,e.deptno,d.dname
FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno-- 红色部分和之前左外连接一样

4、查看视图的状态信息

SHOW TABLE STSTUS LIKE '视图名';-- Comment 值为VIEW说明是视图,为空则不是
SHOW TABLE STSTUS LIKE'view_emp';

SHOW TABLE STATUS LIKE 'dept';

5、查看视图的创建语句

SHOW CREATE VIEW view_emp;

6、DESCRIBE:查看视图结构,可缩写成DESC

DESC `view_emp_dept`;

7、修改视图

方法一  CREATE OR REPLACE VIEW 视图名 AS SELECT语句; 创建一个新的视图覆盖旧的视图

CREATE OR REPLACE   VIEW -- 如果删除OR REPLACE 就会报错建过视图了
view_emp_dept(e_empno,e_ename,e_job,e_deptno,e_mgr,d_dname)
AS 
SELECT e.empno,e.ename,e.job,e.deptno,e.mgr,d.dname FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno

方法二  ALTER VIEW <视图名> AS <SELECT 语句>;

ALTER VIEW view_emp_dept(e_empno,e_ename,e_job,e_deptno,e_mgr,e_sal,d_dname)
AS 
SELECT e.empno,e.ename,e.job,e.deptno,e.mgr,e.sal,d.dname FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno-- 这块select语句基本不动,改上面红的视图名

8、删除视图

DROP VIEW view_emp_dept;

9、修改数据
通过视图修改数据,最终修改的也是基本表中的数据

UPDATE view_dept SET v_dname='工程部' WHERE v_deptno=50;

10、 删除数据
通过视图删除数据,最终删除的也是基本表中的数据

DELETE FROM view_dept WHERE  v_deptno=6;

到此这篇关于MySQL索引与视图的文章就介绍到这了,更多相关mysql索引与视图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中between...and的使用对索引的影响说明

    MySQL中between...and的使用对索引的影响说明

    这篇文章主要介绍了MySQL中between...and的使用对索引的影响说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 详解Mysql主从同步配置实战

    详解Mysql主从同步配置实战

    这篇文章主要介绍了详解Mysql主从同步实战,实例分析了Mysql主从同步的原理和实现,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • MySQL事务视图索引备份和恢复概念介绍

    MySQL事务视图索引备份和恢复概念介绍

    这篇文章主要介绍了MySQL事务、视图、索引、备份和恢复,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • 浅谈mysql增加索引不生效的几种情况

    浅谈mysql增加索引不生效的几种情况

    增加索引就是增加一个索引文件,但是在使用过程中哪些情况增加索引无法达到预期的效果呢?感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Mysql ERROR 1577错误解决方法

    Mysql ERROR 1577错误解决方法

    这篇文章主要介绍了Mysql ERROR 1577错误解决方法,一般是在升级mysql后会发生这个错误,错误原因是需要升级MySQL系统表,需要的朋友可以参考下
    2014-08-08
  • MySQL 序列使用详细说明

    MySQL 序列使用详细说明

    MySQL通过AUTO_INCREMENT属性实现序列功能,用于自动生成唯一的整数值,常用于主键或唯一标识符列,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • 如何实现MySQL的索引

    如何实现MySQL的索引

    这篇文章主要介绍了如何实现MySQL的索引,MySQL中索引分三类,有B+树索引、Hash索引和全文索引,下面我们一起来看看MySQL索引的具体实现,需要的小伙伴可以参考一下
    2022-01-01
  • Mysql的DQL查询操作全面分析讲解

    Mysql的DQL查询操作全面分析讲解

    DQL(Data Query Language 数据查询语言):用于查询数据库对象中所包含的数据。DQL语言主要的语句:SELECT语句。DQL语言是数据库语言中最核心、最重要的语句,也是使用频率最高的语句
    2022-12-12
  • mysqlhotcopy 正则使用小技巧

    mysqlhotcopy 正则使用小技巧

    mysqlhotcopy 是MySQL的热备工具,详细请看手册 ,为了安全起见我们给热备分配个用户
    2011-08-08
  • Mysql数据迁徙方法工具解析

    Mysql数据迁徙方法工具解析

    这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论