一、索引是什么
- index是帮助MYSQL高效获取数据的数据结构。索引是数据结构。相当于书的目录。
二、索引的优缺点
索引的优势:
- 提高查询效率(降低IO的使用率)
- 降低CPU使用率 (因为B树索引本身就是一个排好序的结构,因此在排序时可以直接使用)
索引的缺点:
- 索引本身很大,可以存放在内存/硬盘(通常为硬盘)
- 索引不是所有情况均适用:(比如:数据量少、频繁更新的字段、很少使用的字段等情况)
- 所有索引会降低增删改的效率
三、索引的分类
主键索引:
- 主键索引:根据主键来组织数据的,不能重复 不能为Null
辅助索引/二级索引:
- 单值索引:单列;一个表可以有多个单值索引
- 唯一索引:不能重复 可以是Null
- 复合索引:多个列构成的索引
四、索引与数据的存储关联性
聚簇索引(也可以理解为主键索引):
Innodb中的主键索引(B+树索引)结构中,非叶子节点存储的是索引指针,叶子节点存储的是既有索引也有整行数据。索引和数据是存储在一起的,是典型的聚簇索引。
非聚簇索引(也可以理解为辅助索引/二级索引)
innodb中的辅助索引结构中,叶子节点存储的是主键索引值,并没有完整数据,所以为非聚簇索引。
MyISAM中索引和数据文件分开存储,B+Tree的叶子节点存储的是数据存放的地址,而不是具体的数据,是典型的非聚簇索引;换言之,数据可以在磁盘上随便找地方存,索引也可以在磁盘上随便找地方存,只要叶子节点记录对了数据存放地址就行。因此,索引存储顺序和数据存储关系毫无关联,是典型的非聚簇索引。
五、索引的操作
创建索引:
(1)创建方式一:create 索引类型 索引名 on 表(字段)
- 单值:create index 索引名 on 表(字段)
- 唯一:create unique index 索引名 on 表(字段)
- 复合:create index 索引名 on 表(字段1,字段2)
(2)创建方式二:alert table 表名 add index 索引名(字段)
- 单值:alert table 表名 add index 索引名(字段)
- 唯一:alert table 表名 add unique index 索引名(字段)
- 复合:alert table 表名 add index 索引名(字段1,字段2)
注意:如果一个字段是primary key,则该字段默认是主键索引
删除索引:drop index 索引名 on 表名
查询索引:show index from 表名
更多内容:
数据库篇(1)--数据库事务的四大特性(ACID)
数据库篇(2)--数据库隔离级别及脏读、不可重复读、幻读
数据库篇(3)--MySQL存储引擎InnoDB和MyISAM区别及使用场景
数据库篇(4)--索引
数据库篇(5)-- sql 优化