索引的基础

1.核心

  1. 索引的目标:通过数据表的一个 / 多个属性(字段),快速找到对应的元组(行数据),本质是 “精准定位数据,替代全表扫描”;
  2. 索引的实现方式:不存储完整元组,而是提前记录(持久化存储)对应属性与 “主键值 / 物理存储地址” 的映射关系,通过这份映射关系跳过无效数据遍历,大幅加速查找流程;
  3. 索引的核心价值:这份 “属性→定位信息” 的映射,就是索引的核心载体,也是它能实现 “快速查找” 的根本原因。

总结:索引是存储 “数据表属性值→主键值 / 物理存储地址” 映射关系的物理数据结构(主流 B + 树 / 哈希表)

2.举例

一、 主键索引(PRIMARY KEY)—— 分引擎差异(核心关联存储类型)

1. InnoDB 引擎主键索引(聚簇索引,特殊场景:存储完整元组,替代物理地址)

生活实例:图书馆「馆内编号 + 图书一体」存放架
  • 存储特性:不单独存储 “主键值→物理地址”,而是将「馆内编号(主键)」与「图书本身(元组)」直接绑定存放(对应 InnoDB 主键索引叶子节点存储完整元组),相当于 “编号 A005 的书,直接放在标注 A005 的专属书架上,编号就是位置,无需额外记录地址”。
  • 对比 “存储物理地址”:它跳过了 “物理地址” 的中间记录,直接将主键与数据本身关联,比 “存储物理地址” 更高效,无需额外查找位置,拿到编号就等于拿到图书。
  • 核心特性体现:① 唯一非空:每本书都有唯一馆内编号(无重复、无空号);② 精准定位:知道编号 A005,直接到专属书架取书,一步到位(对应数据库精准定位单条元组);③ 一张表仅 1 个:图书馆只有一套馆内编号系统,对应一张表仅 1 个主键索引。

2. MyISAM 引擎主键索引(非聚簇索引,存储物理地址)

生活实例:图书馆「馆内编号→书架位置」专属目录
  • 存储特性:目录中直接存储「馆内编号(主键值)→ 书架位置(物理地址)」,比如 “A005 → 3 楼 A 区 5 号书架 2 层”(对应 MyISAM 主键索引存储 “主键值→数据物理磁盘地址”)。
  • 使用过程:① 知道要找的书编号是 A005;② 翻馆内编号目录(主键索引),直接获取书架位置(物理地址);③ 直接去对应位置取书,无需二次查询(无回表);
  • 核心特性体现:① 唯一非空:编号不重复、无空号;② 存储物理地址:不关联图书本身,仅记录编号与位置的映射,图书位置变动时,需修改目录中的地址记录。

二、 唯一索引(UNIQUE)—— 非主键索引,存储主键值

生活实例:图书馆「ISBN 号→馆内编号」目录
  • 存储特性:目录中仅记录「ISBN 号(唯一索引字段)→ 馆内编号(主键值)」,比如 “9787111641247 → A005”,完全不记录书架位置(物理地址)(对应唯一索引存储 “索引字段值→主键值”)。
  • 使用过程(含回表,核心体现存储主键值的逻辑):① 你想找 ISBN 号为 9787111641247 的书(通过唯一索引字段查询);② 翻 ISBN 号目录(唯一索引),找到对应的馆内编号 A005(获取主键值,这是索引存储的核心内容);③ 再翻馆内编号目录(主键索引),找到 A005 对应的书架位置(物理地址,此步骤为 “回表”);④ 去对应位置取书;
  • 核心特性体现:① 唯一性:ISBN 号不重复,保证不找到两本相同的书;② 存储主键值:仅绑定 ISBN 号与馆内编号,图书位置变动时,只需修改馆内编号目录,ISBN 号目录无需改动(维护成本低);③ 可多个:图书馆还可创建「读者手机号→读者编号」目录(另一唯一索引),对应一张表可创建多个唯一索引。

三、 普通索引(INDEX)—— 非主键索引,存储主键值

生活实例:图书馆「图书分类→馆内编号」目录
  • 存储特性:目录中仅记录「图书分类(普通索引字段)→ 馆内编号(主键值)」,比如 “计算机类 → A005、A006、A018”,不记录书架位置(物理地址)(对应普通索引存储 “索引字段值→主键值”)。
  • 使用过程(含回表):① 你想找所有计算机类的书(通过普通索引字段查询);② 翻图书分类目录(普通索引),找到所有计算机类图书对应的馆内编号 A005、A006、A018(获取主键值集合);③ 逐个查询馆内编号目录(主键索引),获取每本编号对应的书架位置(物理地址,回表步骤);④ 分别去对应位置取书;
  • 核心特性体现:① 可重复:“计算机类” 对应多个馆内编号(索引字段值重复),对应普通索引无唯一性约束;② 存储主键值:分类目录仅关联分类与编号,图书位置变动时,分类目录无需修改,只需更新馆内编号目录;③ 加速批量查询:通过分类目录快速筛选出目标编号,避免逐排翻找(对应加速批量 / 范围查询)。

四、 联合索引(复合索引)—— 非主键索引,存储主键值

生活实例:图书馆「作者 + 书名→馆内编号」组合目录
  • 存储特性:目录中仅记录「作者 + 书名(联合索引字段)→ 馆内编号(主键值)」,比如 “张三 +《Python 入门》→ A005”,不记录书架位置(物理地址)(对应联合索引存储 “多字段组合值→主键值”)。
  • 使用过程(含回表,遵循最左前缀原则):① 有效场景(索引生效):
    • 查 “作者是张三的所有书”:翻组合目录,找到张三对应的所有馆内编号(A005、A006)(仅用左侧字段,索引生效);
    • 查 “张三 +《Python 入门》”:直接找到对应的馆内编号 A005(用全部字段,索引最优);② 回表步骤:拿着获取到的馆内编号,翻馆内编号目录,获取书架位置,去对应位置取书;③ 无效场景(索引失效):仅查 “《Python 入门》”,组合目录无法使用,只能逐排翻找(不遵循最左前缀原则);
  • 核心特性体现:① 存储主键值:仅绑定多字段组合与编号,维护成本低;② 最左前缀原则:组合目录按 “作者→书名” 排序,仅支持左侧字段优先查询;③ 减少冗余:无需单独建 “作者目录” 和 “书名目录”,一个组合目录即可满足多条件查询。

核心总结(聚焦 “存储内容” 与索引类型的关联)

索引类型存储内容(核心)生活类比核心查询步骤关键特点
InnoDB 主键索引完整元组(替代主键值 / 物理地址)馆内编号与图书一体存放一步到位(编号 = 图书,无回表)效率最高、唯一非空、仅 1 个
MyISAM 主键索引主键值→物理地址馆内编号→书架位置目录一步到位(查编号得位置,无回表)存储物理地址、位置变动需改目录
唯一索引索引字段值→主键值ISBN 号→馆内编号目录两步(查 ISBN 得编号→查编号得位置,回表)唯一、可多个、维护成本低
普通索引索引字段值→主键值图书分类→馆内编号目录两步(查分类得编号→查编号得位置,回表)可重复、可多个、加速批量查询
联合索引多字段组合值→主键值作者 + 书名→馆内编号目录两步(查组合得编号→查编号
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值