
资料内容:
什么是索引?
在数据库中,索引是帮助存储引擎快速获取数据的⼀种数据结构,形象地说就是“数据的⽬录”。
它的设计思路是 “以空间换时间” ,类似书中的⽬录⸺⸺⽆需逐⻚查找,通过索引能快速定位到数据所
在位置,从⽽⼤幅提升数据查询效率。以MySQL为例,不同存储引擎(如InnoDB、MyISAM)会基于
⾃⾝机制实现索引,帮助数据库快速检索数据。
索引的分类?
以下是关于MySQL索引分类的复盘总结,从数据结构、物理存储、字段特性、字段个数四个维度展
开,补充关键细节与易错点,助⼒你完善⼋股笔记:
⼀、按「数据结构」分类
• B+tree索引
◦ 是MySQL中最常⽤的索引结构(InnoDB、MyISAM默认均基于B+树实现)。
◦ 特点:
▪ 所有数据(叶⼦节点)按顺序存储,且叶⼦节点间通过链表相连,⽀持范围查询、排序操作
(如 order by )。
▪ ⾮叶⼦节点仅存索引键,叶⼦节点存数据或主键(⼆级索引),查询效率稳定(时间复杂度
O(logn))。
◦ 适⽤场景:⼤部分业务查询(等值、范围、排序)。
• Hash索引
◦ 基于哈希表实现,通过“键→哈希值→桶”的映射快速定位数据。
◦ 特点:
▪ 等值查询极快(时间复杂度O(1)),但不⽀持范围查询、排序(哈希值是⽆序的)。
▪ 存在“哈希冲突”,需通过链表解决。
◦ 适⽤场景:MySQL的Memory引擎默认使⽤;InnoDB中“⾃适应哈希索引”(⾃动对热点数据
构建哈希索引,属于优化⼿段)。
• Full-text索引(全⽂索引)
◦ ⽤于⽂本内容的分词检索(如⽂章、评论的关键词搜索)。◦ 特点:
▪ 需依赖分词器(如MySQL内置的ngram分词器,或第三⽅插件),对⽂本进⾏分词后建⽴索
引。
▪ ⽀持 match...against 语法,实现模糊的⽂本匹配。
◦ 适⽤场景:博客内容、商品描述等⻓⽂本的关键词检索;仅InnoDB、MyISAM⽀持。