前言
当MySQL不作为内存数据库,而作为磁盘数据库时,所有的文件最终都要放在磁盘中,在下面我们就去看看索引它到底在哪儿?
微信公众号:JavaWeb架构师
MySQL的目录结构
InnoDB数据库引擎
MyISAM数据库引擎
这些文件到底是干什么的呢?下面慢慢开始
与数据库引擎无关的.frm
在上面的目录结构中,不难发现,.frm文件是两个数据库引擎都共有的文件,那么它的存储了哪些信息?有哪些功能呢?
保存表的元数据,包括表结构定义
可以在数据库奔溃的时候恢复表结构(如何恢复?比较简单,文件替换就行,这里就不说了,大家有兴趣的话,可以百度搜索)
MyISAM引擎文件
这种数据库引擎特点是快,所以对文件的划分是比较独立的
.myd:全称 .mydata,存放表数据
.myi:全称 .myindex,存放索引文件
.log:日志文件
InnoDB引擎文件
这种引擎更加关注事务,多以采用表空间的形式来管理数据、存储表数据、存储索引
文件:
ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息、用户数据库表数据、索引
.ibd:单表表空间文件,每个表使用一个表空间文件,存放用户数据库表数据、索引
ib_logfile1、ib_logfile2:日志文件
InnoDB管理主要基于两个文件 表空间数据文件、日志文件。InnoDB可以使用公共表空间或独立表空间
共享表空间
只为每张表单独建立.frm文件,将所有表数据和索引保存到.ibdata1文件中去,缺点是拷贝时需要拷贝整个文件,且删除表后容易造成碎片
独立表空间
为每张表建立一个.frm文件、.ibd文件。.ibd文件用来存储表数据、索引。这时MySQL将数据表信息、索引信息写到.ibd文件中,但结构信息还是写到.ibdata1中
结语
无论是哪种数据库引擎,我们都发现表数据信息和索引信息是单独提出来作为一个单位存放的,索引和表数据到底是什么联系?请继续学习
完
文
视频教程
领取专属 10元无门槛券
私享最新 技术干货