21、MySQL索引

  1. B+Tree索引的核心特性​

21、MySQL索引

  1. 结构设计
  • 非叶子节点​:仅存储索引键值和指向子节点的指针,不存储实际数据,因此能容纳更多键值,降低树高。​叶子节点​:存储完整的数据行(聚簇索引)或主键值(辅助索引),并通过双向链表连接,支持高效范围查询。​平衡性​:所有叶子节点位于同一层,查询路径长度稳定,时间复杂度为O(log n)。
  1. 与B-Tree的区别
  • 数据存储​:B-Tree的非叶子节点存储数据,而B+Tree仅叶子节点存储数据,非叶子节点专注导航。​范围查询​:B+Tree的叶子链表结构支持顺序遍历,B-Tree需回溯根节点,效率更低。​磁盘I/O优化​:B+Tree节点更“胖”(存储更多键值),树高更低,减少磁盘访问次数。
  1. ​MySQL中的B+Tree索引类型​

21、MySQL索引

  1. 主键索引(聚簇索引)​
  • 特点​:叶子节点直接存储整行数据,物理存储顺序与主键顺序一致。​创建方式​:

CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));

— 或通过ALTER TABLE添加

ALTER TABLE users ADD PRIMARY KEY (id);

  1. 唯一索引
  • 约束​:索引列值唯一,允许NULL。​应用场景​:邮箱、手机号等唯一性字段。
  1. 普通索引
  • 功能​:加速单列查询,无唯一性约束。​前缀索引​:针对长字符串字段(如VARCHAR),仅索引部分字符以减少空间占用。
  1. 联合索引
  • 最左前缀原则​:查询需从最左列开始,否则索引失效。​示例​:(name, age)联合索引支持WHERE name='Tom'或WHERE name='Tom' AND age=25,但不支持仅WHERE age=25。
  1. ​索引的优缺点​

21、MySQL索引

​优点​

​缺点​

1. 显著减少磁盘I/O次数(树高低)

1. 占用额外存储空间(尤其大表)

2. 加速排序和分组操作

2. 频繁增删改操作需维护索引,降低写入性能

3. 支持高效范围查询(叶子链表)

3. 低选择性字段(如性别)索引效果差

​四、索引使用提议​

  1. 适用场景
  • 高频查询字段​:如用户ID、订单号等。​大表优化​:数据量超过百万行时,索引显著提升性能。​外键关联​:加速JOIN操作。
  1. 避免滥用
  • 小表​:全表扫描可能更快。​频繁更新字段​:如状态字段,索引维护成本高。​唯一性差的字段​:如“是否删除”标志,索引选择性低。
  1. ​索引维护与优化​

21、MySQL索引

  1. 查看索引

DESC 表名; — 简略信息

SHOW INDEX FROM 表名; — 详细信息(Cardinality等)

  1. 删除索引

ALTER TABLE 表名 DROP INDEX 索引名; — 普通索引

ALTER TABLE 表名 DROP PRIMARY KEY; — 主键索引

  1. 优化工具
  • EXPLAIN​:分析查询执行计划,确认是否命中索引。​OPTIMIZE TABLE​:重建表并整理碎片,提升索引效率。

​六、总结​

B+Tree索引通过非叶子节点导航和叶子链表设计,完美平衡了查询效率与存储成本,是MySQL高性能查询的核心。合理选择索引类型(如主键、联合索引)并遵循最左前缀原则,可最大化其优势,同时需避免过度索引导致的维护开销。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
夕十大人啊的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容