Mysql索引

目录

一、定义:

二、作用与副作用:

三、工作方式:

四、创建索引的依据:

五、索引的类型

1、普通索引:

2、唯一索引:

3、主键索引:

4、组合索引:

5、全文索引:


一、定义:

索引是一个排序的列表,包含索引字段的值和其对应的行记录的数据所在的物理地址

二、作用与副作用:

作用:加快表的查询速度,还可以对字段排序

副作用:会额外占用磁盘空间;更新包含索引的表会花费更多的时间,效率会更慢

三、工作方式:

1、没有索引的情况下,要根据条件查询某行数据时,需要先扫描全表,再定位某行数据的位置。

2、有了索引后,会先通过查询条件的字段值找到其索引对应的行记录的数据的物理地址,然后根据物理地址直接访问相应的行记录的数据,就像根据书目录的页码快速找到所需的内容。

四、创建索引的依据:

1)表中的记录行数较多时,一般超过300行的表建议要有索引

2)建议在表中的主键字段、外键字段、多表连接使用的公共关键字段、唯一性较好的字段、不经常更新的字段、经常出现在 where,group by,order by 子语句的字段、 短小的字段上面创建索引

3)不建议在唯一性较差的字段、更新太频繁的字段、大文本字段上面创建索引

五、索引的类型

1、普通索引:

最基本的索引类型,没有唯一性之类的限制

create index 索引名 on 表名(字段);
alter table 表名 add index 索引名(字段);

2、唯一索引:

与普通索引类似,但区别是唯一索引列的每个值都唯一。唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。
create unique index 索引名 on 表名 (字段);
alter table 表名 add unique 索引名 (字段);

3、主键索引:

是一种特殊的唯一索引,必须指定为"PRIMARY KEY"。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。
alter table 表名 add primary key (字段);

4、组合索引:

可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为 select 语句的 where 条件是依次从左往右执行的,所以在使用 select 语句查询时 where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
create index 索引名 on 表名 (字段1, 字段2, ....);
alter table 表名 add index 索引名 (字段1, 字段2, ....);

5、全文索引:

适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。在 MySQL5.6 版本以前FULLTEXT 索引仅可用于 MyISAM 引擎,在 5.6 版本之后 innodb 引擎也支持 FULLTEXT 索引。全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。
create fulltext index 索引名 on 表名 (字段);
alter table 表名 add fulltext 索引名 (字段);

六、查看索引

show create table 表名;

show index from 表名;

show keys from 表名;

七、删除索引

drop index 索引名 on 表名;
alter table 表名 drop index 索引名;
#除了主键索引,都是可以用以上两种命令删除索引

alter table 表名 drop primary key;
#主键索引只能用alter删除主键的方式

八、遇到 select 语句查询速度慢改怎么办?

1)先使用 explain 分析 select 语句,看 key 字段,确定 select 语句使用使用了索引或索引使用是否正确

2)再根据 select 语句中 where 子语句使用的条件字段创建相应的单列索引或组合索引,组合索引要满足最左原则

相关推荐
R.lin28 分钟前
windows MySQL解压版安装教程
windows·mysql·adb
宋军涛30 分钟前
记一次Sqlserver数据库存储过程调用导致的连接池耗尽事件
数据库
前端小臻39 分钟前
MySQL 错误 1005 (errno: 150) 深度解析与解决方案
数据库·mysql
魔镜前的帅比43 分钟前
向量数据库原理
数据库·人工智能
Dev7z43 分钟前
在MySQL里创建数据库
android·数据库·mysql
Leon-Ning Liu1 小时前
19C Oracle 集群(RAC)软件 与数据库软件 PSU 补丁部署流程
数据库·oracle
invicinble1 小时前
mysql建立存数据的表(一)
android·数据库·mysql
清风6666661 小时前
基于单片机的8路抢答器设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
点灯小铭1 小时前
基于单片机的智能污水有害气体电子鼻检测系统
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
spencer_tseng2 小时前
MySQL backup.bat
mysql