什么是聚集索引和非聚集索引 ( 或者聚簇索引和非聚簇索引 )

1.什么是聚集索引和非聚集索引 ?(聚簇索引和非聚簇索引)

聚集还是非聚集指的是B+Tree 叶结点存的是指针还是数据记录

MyISAM索引和数据分离,使用的是非聚集索引

InnoDB数据文件就是索引文件,主键索引就是聚集索引

(1)MyISAM引擎 默认是非聚集索引

在这里插入图片描述
图解:在叶结点里面存储的是指向数据的指针,如叶结点5中存储的0x6A,指针指向的数据的表文件也就是数据文件,这里索引文件和数据文件是两个文件,所以说它是非聚集的。

① 非聚集索引文件存储方式

CREATE TABLE myisam_table (
    `id` INTEGER PRIMARY KEY,
     title VARCHAR(80)
) ENGINE = MYISAM;   

非聚集索引,存储需要两个文件myisam_table.MYD数据文件和myisam_table.MYI索引文件
(2)InnoDB引擎主键索引是聚集索引

在这里插入图片描述
图解:叶结点即存储 主键 同时也存储 数据表里面的内容,如叶结点15, 存储主键34和数据Bob。

① 聚集索引件存储方式

CREATE TABLE innodb_table (
    `id` INTEGER PRIMARY KEY,
    `url_md5` char(32),
    KEY `idx_url` (`url_md5`)
) ENGINE = InnoDB;

聚集索引,只有一个文件innodb_table.idb,说明数据和索引存储在同一个文件
(3)InnoDB引擎辅助索引

在这里插入图片描述
对于InnoDB引擎它的辅助索引,它的叶结点存储的是主键的值。然后再通过主键找到对应的数据。其实这是两个过程,这就是为什么在InnoDB引擎里面使用辅助索引要比直接使用主键索引慢一些的原因。

辅助索引先找到主键以后再根据主键找到数据

聚集和非聚集区别是在 B+Tree的叶结点存储数据还是指针 ,

MyISAM 默认使用索引是非聚集的,

InnoDB 主键索引是聚集索引

1、非聚集索引
非聚集索引的叶子节点为索引节点,但是有一个指针指向数据节点。

MyISAM是非聚集索引。

2、聚集索引
聚集索引叶子节点就是数据节点。

关于聚集索引,innodb会按照如下规则进行处理:
  1,如果一个主键被定义了,那么这个主键就是作为聚集索引
  2,如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引
  3,如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

innodb的普通索引,唯一索引,联合索引都是辅助索引,采用非聚集索引结构。InnoDB的所有辅助索引都引用主键作为data域。

聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值