实际开发中使用的索引种类
- 主键索引
- 唯一索引
- 普通索引
- 联合索引
- 全文索引
索引的格式类型
- BTree类型
- Hash类型
- FullText类型(全文索引
- RTree类型(空间索引
以索引数据存储方式划分的概念
- 聚集索引
- 非聚集索引
以技巧划分
- 覆盖索引
- 前缀索引
也有人把聚集索引叫做聚簇索引
.
.
一、索引介绍
索引是一种数据结构,索引的作用主要是为了提高检索效率,添加一个索引需要选择一个字段作为索引依据
索引数据格式主要有两种
- Hash
- B+Tree
在实际开发中,其实用的最多的是B+Tree数据类型,因为hash数据格式是不支持范围查询的,而基于二叉树数据结构的B+Tree可以支持范围查询(注:B+Tree是B树的进化版)
拓展
(1)Mysql索引为什么使用B+Tree数据结构?
从计算机原理出发,是因为索引本身消耗就很大,不可能全部储存到内存中,因此索引往往索引文件的形式存储在磁盘上,那这样话,磁盘IO效率就会起决定性的作用。
(2)全文索引和空间索引是什么?
.
.
二、索引类型
1、普通索引
普通索引是最基本的索引,也是最常用的索引,创建只是为了提高查询效率,值可以为空,没有任何限制
alter table 表名 add index 索引名(添加索引的字段)
2、唯一索引
唯一索引和普通索引类似,值也可以为空,唯一区别是添加的字段是唯一性,列值不允许重复
alter table 表名 add unique 索引名(添加索引的字段)
3、主键索引
主键索引是一种特殊的唯一索引, 值不允许为空 和 列值不允许重复,且一张表只允许有一个主键索引
alter table 表名 add primary key (添加索引的字段)
4、联合索引
联合索引,顾名思义,就是多个索引联合在一起组成的一种索引类型。
//索引名可以是index_xx_xx
alter table 表名 add index 索引名(索引1,索引2,索引3)
关于联合索引的拓展
(1)最左前缀匹配原则
建立联合索引时会遵循最左匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配
例如🌰
在user表中为 name、address、phone 三个字段添加联合索引
ALTER TABLE user ADD INDEX index_three(name,address,phoen)
下面三条sql语句都能命中索引
SELCET * FROM user WHERE address =’ 北京’ AND phone = ‘12345’ AND name = ‘张三’;
SELCET * FROM user WHERE name = ‘张三’ AND address = ‘北京’;
SELCET * FROM user WHERE name = ‘张三’;
这三条sql语句都会匹配联合索引,按顺序是 (name,address,phone) 、(name,address) 、(name),其实使用联合索引时可以不用按照建索引时候的顺序