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 查询语句   //能够显示是否使用了索引

扫描的类型

  1. ALL 全表扫描,没有优化,最慢的方式
  2. index 索引全扫描,其次慢的方式
  3. range 索引范围扫描,常用语<,<=,>=,between等操作
  4. ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中
  5. eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询
  6. const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询,system是const的特殊情况
  7. 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)的主要内容,如果未能解决你的问题,请参考以下文章

未找到视图“索引”或其主视图。

为啥Sql Indexed View总是使用聚集索引

mysql内部组件架构,索引管理,视图view

部署到生产时找不到索引视图?

mysql 拾遗提高(函数事务索引)

MySQL 团队开发规范