MySQL的索引(index)和视图(view)
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的索引(index)和视图(view)相关的知识,希望对你有一定的参考价值。
mysql中的索引和视图
总结了一些索引和视图在MySQL中的作用和用法
索引(index)
索引是一种对数据表中一列或者多列值进行排序的一种存储结构。索引相当于书本的目录,可以让我们快速的查找到我们所需要查找的内容。
什么时候需要给字段添加索引?
1. 数据表中该字段的数据量很多
2. 该字段经常作为条件被检索
3. 经常被增删改(DML)操作的字段不建议加上索引
- 创建索引的基本语法
create index 索引名 on 表名(字段名) // 该字段名表示被索引的字段
alter table 表名 add unique (字段名) //创建唯一索引
alter table 表名 add index 索引名 (字段名,字段名) //创建复合索引
alter table 表名 add unique index 索引名 (字段名,字段名) //创建复合唯一索引
索引有三类:
- 单一索引:一个索引只包含了一列,列表示被索引的字段的那个一列
- 唯一索引:索引列的值必须唯一,但是可以为空
- 复合索引:一个索引包含多列
主键会自动创建唯一索引
- 查看索引
show index from 表名 //查看该表中的所有索引
-查看查询时是否使用了索引
explain 查询语句 //能够显示是否使用了索引
扫描的类型
- ALL 全表扫描,没有优化,最慢的方式
- index 索引全扫描,其次慢的方式
- range 索引范围扫描,常用语<,<=,>=,between等操作
- ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中
- eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询
- const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询,system是const的特殊情况
- null MySQL不访问任何表或索引,直接返回结果
上面一个查询语句使用了索引下面一个没有使用索引
- 删除索引
drop index 索引名 on 表名
alter table 表名 drop index 索引名
alter table 表名 drop primary key //删除主键的索引,一般一张表中只有一个主键
删除索引后,查询会执行全表扫描
优缺点
-
优点
1、很大程度上提高了数据的检索效率
2、加快了表与表之间的连接
3、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 -
缺点
1、索引需要占用物理空间
2、当对表中的数据进行增删改(DML)操作的时候,索引也需要动态的维护,降低了数据的维护速度
视图(view)
视图是指基于SQL语句查询出来的数据组成的虚拟表,但是这个虚拟表可以进行增删改操作,并且通过对视图的操作,会影响到原表数据。
- 创建视图
create view 视图名 as 查询语句; // 注意子查询创建视图不被支持
将student表中的学号、姓名、年龄查询出来作为一个视图
create view view_student as select id,name,age from student;
我们对这个视图进行操作就相当于对student表进行操作,操作跟操作表一样
将视图中张三的年龄修改为20
update view_student set age = 20 where name = '张三';
这里将张三的年龄修改后,student表中张三的年龄也会被修改为20
- 删除视图
drop view 视图名
视图的特点: 可以将复杂的SQL语句以视图对象的形式新建。在需要编写这条SQL语句的位置直接使用视图对象,可以大大简化开发。
以上是关于MySQL的索引(index)和视图(view)的主要内容,如果未能解决你的问题,请参考以下文章