其他分享
首页 > 其他分享> > 索引

索引

作者:互联网

索引

1、索引

索引是帮助MySQL高效获取数据的数据结构

2、索引的优点

3、索引的缺点

4、索引的分类

从存储结构上划分

从应用层次上划分

从数据的物理顺序与键值的逻辑顺序来划分

4.1 Hash索引

基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),并且Hash索引将所有的哈希码存储在索引中,同时在索引表中保存指向每个数据行的指针。

4.2 B-Tree索引

B-Tree是最常用于索引的数据结构。因为B-Tree的插入、删除、修改、查找操作都可以在对数时间内完成。并且存储在B-Tree中的数据是有序的。

4.3 B+Tree索引

B+Tree是B-Tree的改进版本。B+Tree的数据都在叶子节点上,并且所有叶子节点形成有序链表,便于范围查询。

4.4 聚簇索引

索引项的排序方式和表中数据记录排序方式一致的索引。所以一个表只能有一个聚簇索引。
在这里插入图片描述

聚簇索引的优点

  1. 数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中。
  2. 聚簇索引对于主键的排序查找和范围查找速度非常快,因为其数据是按照大小排列的。

聚簇索引的缺点

  1. 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
  2. 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
4.5 非聚簇索引

索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚簇索引。
在这里插入图片描述

5、聚簇索引和非聚簇索引的区别

6、mysql默认存储引擎的索引建立

mysql默认存储引擎innodb只显式支持B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B-Tree索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。

7、为什么mysql索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?

8、为什么官方建议使用自增长主键作为索引?

结合B+Tree的特点,自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。并且能减少数据的移动,每次插入都是插入到最后。总之就是减少分裂和移动的频率。

参考链接

Mysql索引详解

标签:非聚,聚簇,Tree,索引,数据,主键
来源: https://blog.csdn.net/weixin_43203889/article/details/115876893