mysql索引 -- 聚簇索引,非聚簇索引,如何查看linux下的数据库文件,普通/辅助索引(回表查询)

目录

聚簇索引和非聚簇索引

聚簇索引

介绍

示例

查看当前的数据库数据目录

表文件

非聚簇索引

介绍

myisam

示例

普通(辅助)索引

引入(回表查询)


mysql索引结构详细介绍 -- mysql索引 -- 索引的硬件理解(磁盘,磁盘与系统),软件理解(mysql,与系统io,buffer pool),索引结构介绍和理解(page内部,page之间,为什么是b+树)-CSDN博客

聚簇索引和非聚簇索引

聚簇索引

介绍

将用户数据与索引数据放在一起的索引方案

示例

查看当前的数据库数据目录
show variables like 'datadir';

然后我们可以在linux下进入该目录,会发现我们所有创建的数据库在里面以目录文件形式存在:

进入某个目录,里面包含了该数据库中所有表相关数据:

表文件

使用innodb存储引擎建表后,linux下会有两个对应文件被创建出来:

.frm

  • 保存表结构数据

.idb

  • 保存索引结构和表文件数据
  • 这样就可以证明,使用innodb存储引擎时,会将数据和索引结构放在一起,而这就是聚簇索引的定义

非聚簇索引

介绍

将用户数据与索引数据分离的索引方案

myisam

myisam存储引擎的索引结构也使用b+树,但和innodb中的不同

innodb是将数据和b+树放在一块,整体作为索引结构:

而myisam是单独将b+树拎出来作为索引结构,然后在叶子结点内存放指向数据的指针:

  • 所以,它比innodb中的查找过程多一步,通过找到的数据指针,找到数据

示例

使用myisam存储引擎建表后,会创建三个文件:

.frm

  • 表结构数据

.MYD

  • 表数据

.MYI

  • 索引结构

这样就可以证明,使用myisam存储引擎时,会将数据和索引结构分开存放,而这就是非聚簇索引的定义

普通(辅助)索引

引入(回表查询)

之前我们看到的,都是以主键建立的索引结构,也可以以其他列作为键值创建索引(也就是b+树):

innodb中建立的辅助索引,如果仍按照聚簇索引方式创建,就也会在叶子结点中存放表数据

  • 那么,相当于一份数据在多个b+树中存放了多份
  • 没这个必要
  • 所以,辅助索引中的叶子结点只会存放该行数据对应的key值(主键键值),然后根据这个key值,去主键索引中查找相应数据
  • 以上过程被称为回表查询

myisam中,以两种键值创建的b+树没啥区别

  • 因为myisam将数据和b+树分开,索引结构存放的是数据的地址,不会出现数据重复存放的问题,所以没有区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值