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要求每个表必须有一个主键索引
唯一索引
这种索引和普通索引基本相同,唯一的一个区别就是索引中所有的值只能出现一次,且必须唯一。如果为列的前缀部分作唯一索引,那列的前缀部分必须是唯一的,如果添加的值已经存在会发生错误
【MySQL索引(一)】如果一个表中有一个主键索引或者非空的唯一索引且是由单个的整数类型组成的,可以在select语句中使用此索引列_rowid
,具体情况如下:
- 如果主键是由单个整数列组成的,则
_rowid
指向主键列,如果存在主键,但不是包含单个整数列,则不能使用_rowid
_rowid
指定第一个非空唯一索引的列,前提是该索引列是由单个整数类型组成的,如果第一个非空的唯一索引列是不包含单个整数类型的列,则不能使用_rowid
全文索引 全文索引仅支持
Innodb
和MyISAM
,并且列的类型只能是char
,varchar
,text
,不支持前缀索引,如果指定了也无效,会被忽略。空间索引
MyISAM
,Innodb
,NDB
,ARCHIVE
存储引擎支持point
和geometry
等空间列,但是不同的存储引擎对空间列索引的支持是不同的,空间列的空间和非空间索引可以根据一下规则使用。空间列上的空间索引具有以下特征:
- 仅对
Innodb
和MyISAM
引擎生效,为其他引擎指定空间索引会报错 - 从mysql8.0.12开始,空间列的索引必须是空间索引(SPATIAL),因此SPATIAL关键字是可选的,但是对于空间列上创建索引是隐式的
- 仅能在单个空间列上创建空间索引,不能在多个列上创建空间索引
- 索引列不能为空
- 不能指定列前缀长度,列的整体被加入索引
- 不能用于主键索引或者唯一索引
文章图片
参考链接 https://dev.mysql.com/doc/ref...
推荐阅读
- MySQL索引(二)索引优化方案你都了解吗
- 服务器|分布式ID问题及解决方案
- 分布式|Cluster之 分布式ID解决方案
- Mysql|MySQL误操作恢复神器一家老小全在这里
- 笔记|Mybatis---ResultMap自定义映射规则
- Mybatis笔记|(Mybatis笔记)mybatis-plus 3.4.3.4 + mybatis-plus-generator 3.5.1 代码生成器使用——超详细
- 操作系统|操作系统 --- 文件操作和IO
- MySQL数据库|MySQL数据库 --- 事务面试重点
- 聊聊mysql的树形结构存储及查询