MySQL 中的聚簇索引和非聚簇索引有什么区别?

MySQL 中的聚簇索引和非聚簇索引有什么区别?

1. 从不同存储引擎去考虑
  1. 在MySIAM存储引擎中,索引和数据是分开存储的,包括主键索引在内的所有索引都是“非聚簇”的,每个索引的叶子节点存储的是数据记录的物理地址(指针),而不是数据本身
  2. 而在InnoDB存储引擎中,InnoDB 的主键索引是聚簇索引,叶子节点直接包含完整数据记录
2. 从InnoDB内部去考虑
  1. 聚簇索引
    1. 索引叶子结点存储的是数据行,可以直接访问完整数据
    2. 每个表只能有一个聚簇索引,通常是主键索引,适合范围查询和排序
  2. 非聚簇索引
    1. 索引的叶子结点存储的是主键和对应的索引列,而不是完整数据,如需访问完整数据需要根据主键回表查询
    2. 一个表可以有多个非聚簇索引,适用于快速查找对应的列数据

注意,主键索引和聚簇索引的区别,他们并不相等!

  1. 主键优先
    • 如果表定义了PRIMARY KEY,则自动使用主键作为聚簇索引
  1. 无主键时的选择
    • 如果没有主键,InnoDB会选择第一个所有列都是NOT NULL的UNIQUE索引作为聚簇索引
    • 如果既没有主键也没有符合条件的UNIQUE索引,InnoDB会内部生成一个隐藏的6字节列(DB_ROW_ID)作为聚簇索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值