MySQL Version
MySQL 8.0.20
索引定义
索引一种非凡的数据结构,为表中的数据行提供疾速查找性能,通常通过一个树结构(B 树)来示意特定的列,或者一组列的所有值。Innodb 引擎中的表有一个示意主键的汇集索引,还能够在一个列或者多个列上创立一个或多个二级索引。依据二级索引的构造,能够分为局部索引(col_name (length)),列索引(col_name),组合索引(col_name1,col_name2,…)
大多数 MySQL 索引(PRIMARY KEY
、UNIQUE
、INDEX
和 FULLTEXT
)都存储在 B-trees 中。例外:空间数据类型的索引应用 R-trees;MEMORY
表也反对散列索引;InnoDB
应用倒排列表作为 FULLTEXT
索引
索引类型
主键索引
一种惟一索引,必须指定的是primary key
, 个别在创立表的时候指定,也能够通过批改表的形式指定alter table
。Innodb 要求每个表必须有一个主键索引
惟一索引
这种索引和一般索引基本相同,惟一的一个区别就是索引中所有的值只能呈现一次,且必须惟一。如果为列的前缀局部作惟一索引,那列的前缀局部必须是惟一的,如果增加的值曾经存在会产生谬误
如果一个表中有一个主键索引或者非空的惟一索引且是由单个的整数类型组成的,能够在 select 语句中应用此索引列_rowid
,具体情况如下:
- 如果主键是由单个整数列组成的,则
_rowid
指向主键列,如果存在主键,但不是蕴含单个整数列,则不能应用_rowid
_rowid
指定第一个非空惟一索引的列,前提是该索引列是由单个整数类型组成的,如果第一个非空的惟一索引列是不蕴含单个整数类型的列,则不能应用_rowid
一般索引
一般的索引,没有任何的限度,也是咱们罕用的索引
全文索引
全文索引仅反对 Innodb
和MyISAM
,并且列的类型只能是char
,varchar
,text
, 不反对前缀索引,如果指定了也有效,会被疏忽。
空间索引
MyISAM
,Innodb
,NDB
,ARCHIVE
存储引擎反对 point
和geometry
等空间列,然而不同的存储引擎对空间列索引的反对是不同的,空间列的空间和非空间索引能够依据一下规定应用。
空间列上的空间索引具备以下特色:
- 仅对
Innodb
和MyISAM
引擎失效,为其余引擎指定空间索引会报错 - 从 mysql8.0.12 开始,空间列的索引必须是空间索引(SPATIAL),因而 SPATIAL 关键字是可选的,然而对于空间列上创立索引是隐式的
- 仅能在单个空间列上创立空间索引,不能在多个列上创立空间索引
- 索引列不能为空
- 不能指定列前缀长度,列的整体被退出索引
- 不能用于主键索引或者惟一索引
InnoDB Storage Engine Index Characteristics
参考链接
https://dev.mysql.com/doc/ref…