数据结构与索引概述

1. 索引的定义

索引是将无序的数据变得有序,从而加快查找速率的一种数据结构。

2. 数据结构比较

2.1 Hash 表

  • 特点:不支持顺序和范围查询,因此不适合某些场景。
  • 优点:查找速度快,适合精确查找。

2.2 二叉树

  • 特点:左子节点的值小于根节点,右子节点的值大于根节点。
  • 缺点:在某些情况下(如插入顺序不当),可能形成斜树,严重影响查询速率。

2.3 AVL 树(自平衡二叉树)

  • 特点:通过旋转操作保持平衡。
  • 缺点:频繁的旋转可能影响 I/O 性能。

2.4 红黑树

  • 特点:相对平衡,能够保证 O(log n) 的查找时间。
  • 缺点:可能导致树的高度较高,增加多次磁盘 I/O 操作的可能性。

2.5 B 树与 B+ 树

  • B 树:所有节点既存放键(key)也存放数据(data)。
  • B+ 树:只有叶子节点存放键和数据,内节点只存放键。叶子节点之间有引用链。
  • 优点
    • B+ 树的检索效率更稳定,查找过程从根节点到叶子节点。
    • 范围查询时,B+ 树只需遍历链表,效率高于 B 树。

3. 聚集索引与非聚集索引

3.1 聚集索引(Clustered Index)

  • 定义:索引结构与数据一起存放,InnoDB 中的主键索引即为聚集索引。

3.2 非聚集索引(Non-Clustered Index)

  • 定义:索引结构与数据分开存放,二级索引(辅助索引)属于非聚集索引。
  • 示例:MySQL 的 MyISAM 引擎使用非聚集索引。

3.3 回表

  • 定义:通过索引快速定位数据后,再返回基础表获取完整行数据的过程。

4. 覆盖索引

  • 定义:查找的数据都存在索引树的叶子节点上,避免回表操作,提升查询效率。

5. 主键非自增的问题

  • 问题:插入效率下降,可能导致数据块移动。

6. 为什么使用 B+ 树作为默认索引结构

  • 优势
    • B+ 树的叶子节点仅存储数据,其他节点存储键,存储效率更高。
    • 叶子节点的双向链表结构提高了查询速度。
    • B+ 树的 I/O 次数更少,索引效率更佳。

7. 索引失效的情况

  • :模糊查询 LIKE 以 % 开头。
  • :数据类型错误。
  • :对索引字段使用内部函数。
  • :索引列是 NULL。
  • :索引列进行四则运算。
  • :复合索引不按最左索引列开始查找。
  • :全表查找预计比索引更快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值