ToB企服应用市场:ToB评测及商务社交产业平台
标题:
mysql索引都有哪些,有哪些分类
[打印本页]
作者:
宝塔山
时间:
2023-3-20 14:27
标题:
mysql索引都有哪些,有哪些分类
按数据结构分类可分为:
B+tree索引、Hash索引、Full-text索引
。
按物理存储分类可分为:
聚簇索引、二级索引(辅助索引)
。
按字段特性分类可分为:
主键索引、普通索引、前缀索引
。
按字段个数分类可分为:
单列索引、联合索引(复合索引、组合索引)
。
一、按数据结构分类
MySQL索引按数据结构分类可分为:
B+tree索引、Hash索引、Full-text索引
。
-
InnoDB
MyISAM
Memory
B+tree索引
✓
✓
✓
Hash索引
×
×
✓
Full-text索引
✓(MySQL5.6+)
✓
✓
注:InnoDB实际上也支持Hash索引,但是InnoDB中Hash索引的创建由存储引擎引擎自动优化创建,不能人为干预是否为表创建Hash索引
二、按物理存储分类
MySQL索引按叶子节点存储的是否为完整表数据分为:
聚簇索引、二级索引(辅助索引)
。全表数据存储在聚簇索引中,聚簇索引以外的其他索引叫做二级索引,也叫辅助索引。
1. 聚簇索引
聚簇索引的每个叶子节点存储了一行完整的表数据,叶子节点间按id列递增连接,可以方便地进行顺序检索。
InnoDB表要求必须有聚簇索引,默认在主键字段上建立聚簇索引,在没有主键字段的情况下,表的第一个非空的唯一索引将被建立为聚簇索引,在前两者都没有的情况下,InnoDB将自动生成一个隐式的自增id列,并在此列上建立聚簇索引。
以MyISAM为存储引擎的表不存在聚簇索引。
MyISAM表中的主键索引和非主键索引的结构是一样的,索引的叶子节点不存储表数据,存放的是表数据的地址。所以,MyISAM表可以没有主键。
MyISAM表的数据和索引是分开存储的。MyISAM表的主键索引和非主键索引的区别仅在于主键索引的B+tree上的key必须符合主键的限制,非主键索引B+tree上的key只要符合相应字段的特性就可以了。
2. 二级索引
二级索引的叶子节点并不存储一行完整的表数据,而是存储了聚簇索引所在列的值。
回表查询
由于二级索引的叶子节点不存储完整的表数据,索引当通过二级索引查询到聚簇索引列值后,还需要回到聚簇索引也就是表数据本身进一步获取数据。
回表查询 需要额外的
B+tree
搜索过程,必然增大查询耗时。
需要注意的是,
通过二级索引查询时,回表不是必须的过程
,当
SELECT的所有字段在单个二级索引中都能够找到
时,就不需要回表,MySQL称此时的二级索引为
覆盖索引
或触发了
索引覆盖
。
可以用Explain命令查看SQL语句的执行计划,执行计划的Extra字段中若出现
Using index
,表示查询触发了
索引覆盖
。
三、按字段特性分类
MySQL索引按字段特性分类可分为:
主键索引、唯一索引、普通索引、前缀索引
。
1. 主键索引
建立在主键上的索引被称为
主键索引
,一张数据表只能有一个主键索引,索引列值不允许有空值,通常在创建表时一起创建。
2. 唯一索引
建立在UNIQUE字段上的索引被称为
唯一索引
,一张表可以有多个唯一索引,索引列值允许为空,列值中出现多个空值不会发生重复冲突。
3. 普通索引
建立在普通字段上的索引被称为
普通索引
。
4. 前缀索引
前缀索引
是指对字符类型字段的前几个字符或对二进制类型字段的前几个bytes建立的索引,而不是在整个字段上建索引。前缀索引可以建立在类型为char、varchar、binary、varbinary的列上,可以大大减少索引占用的存储空间,也能提升索引的查询效率。
四、按索引字段个数分类
MySQL索引按字段个数分类可分为:
单列索引、联合索引(复合索引、组合索引)
。
1. 单列索引
建立在单个列上的索引被称为单列索引。
2. 联合索引(复合索引、组合索引)
建立在多个列上的索引被称为联合索引,又叫复合索引、组合索引。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4