一、索引是什么


  • index是帮助MYSQL高效获取数据的数据结构。索引是数据结构。相当于书的目录。

二、索引的优缺点


索引的优势:

  1. 提高查询效率(降低IO的使用率)
  2. 降低CPU使用率 (因为B树索引本身就是一个排好序的结构,因此在排序时可以直接使用)

索引的缺点:

  1. 索引本身很大,可以存放在内存/硬盘(通常为硬盘)
  2. 索引不是所有情况均适用:(比如:数据量少、频繁更新的字段、很少使用的字段等情况)
  3. 所有索引会降低增删改的效率

三、索引的分类


主键索引:

  • 主键索引:根据主键来组织数据的,不能重复 不能为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 优化