MySQL-索引
1、索引
索引是帮助MySQL高效获取数据的数据结构。在 MySQL 中,索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。
MySQL目前主要有以下索引类型:
-
普通索引key
-
唯一索引unique key
-
主键索引primary key
-
组合索引 index(name,age,gender)
-
全文索引
MySQL的索引结构主要包括有:
BTree索引、Hash索引、full-text索引、R-Tree索引
如果没有特别指明,都是指B+树别构的索引。
InnoDB存储引擎中的B+树索引是由二叉查找树,平衡二叉树和B树这三种数据结构演化过来的。
查看表索引类型
mysql> show index from table_name ;
2、B+树和B树的不同
-
B+树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据。
如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的 IO 次数又会再次减少,数据查询的效率也会更快。 -
B+ 树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的。在 InnoDB 中,我们通过数据页之间通过双向链表连接以及叶子节点中数据之间通过单向链表连接的方式可以找到表中所有的数据。
3、索引分类
在 MySQL 中,B+ 树索引按照存储方式的不同分为聚集索引和非聚集索引。
-
聚簇索引:以 InnoDB 作为存储引擎的表,表中的数据都会有一个主键,即使你不创建主键,系统也会帮你创建一个隐式的主键。
这种以主键作为 B+ 树索引的键值而构建的 B+ 树索引,我们称之为聚集索引。
聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。 -
非聚簇索引:以主键以外的列值作为键值构建的 B+ 树索引,我们称之为非聚集索引。
-
覆盖索引,就是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
-
联合索引
聚簇索引和非聚簇索引区别是,在B+树结构中,聚簇索引叶子节点存储的表中的行数据,而非聚簇索引叶子节点存储的主键的值,通过该值回到主键索引树搜索,这个过程是回表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本