您的位置:首页 > 数据库 > MySQL

mysql 使用InnoDB 引擎时候的存储文件系统初探

2017-09-13 14:29 736 查看
新建立一个数据库时候

在mysql Server所在地址下的data目录下:

建立了ibdata1,用来记录InnoDb系统信息和数据库表数据和索引,为所有的表锁公用。

日志文件: ib_logfile1、ib_logfile2

mySql在其工作目录的data文件夹下:

建立一个新的名字为dbName的文件夹,并在里面创建了一个文件,db.opt, 文件的内容是数据库的定义信息

default-character-set=utf8
default-collation=utf8_general_ci


在这个数据库中建立一张表,表名为user1.

CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`age` int(11) DEFAULT NULL,
`money` double NOT NULL,
`gender` tinyint(4) DEFAULT NULL,
`varc` varchar(32) NOT NULL,
`c32` char(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


在dbName文件夹下增加了两个文件,user1.frm和user1.ibd;

然后通过插入数据来观察三个文件的大小变化:ibdata1,user1.frm和user1.ibd;

INSERT INTO user1 (name,age) VALUES ('name1',5);


插入1条数据:

146,800,640 字节

8,614 字节

98,304 字节

插入四条数据:

146,800,640 字节

8,614 字节

98,304 字节

插入几千条数据:

146,800,640 字节

8,614 字节

360,448 字节

我发现,360,448 - 98,304 = 1024*256 , 猜测user1.ibd这个东西是按照1KB定长来扩展的。

创建一个新的表

CREATE TABLE `user2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7047 DEFAULT CHARSET=utf8;


data文件下的ibdata1的大小不变为了146,800,640字节。

同时,在dbName文件夹下增加了两个文件,

user2.frm和user2.ibd;其初始大小分别为9kb(8,614 字节)和96kb(98,304 字节),与上面相同。

关于删除操作

删除前:146,800,6
9e99
40 字节,8,614 字节,180,224 字节

使用delete语句删除一千条数据在user2中。

DELETE FROM user2 where id BETWEEN 7000 and 7000+1000;


发现,user2.ibd不减反增加为(192K)196,608字节。

在user3表中,使用Delete语句不加where条件。

DELETE FROM user3 ;
受影响的行: 2286
时间: 0.082s


发现,user3.ibd不减反增加为(192K)196,608字节。

在user4中使用truncate,

TRUNCATE TABLE user4;


观察到,user4.ibd的大小回到的建表后插入数据之前的大小,98,304 字节。

在user5中使用drop操作,

DROP TABLE user5;


user5.frm和user5.ibd都消失了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: