Innodb表空间
Innodb有两种管理表空间的方法
独立表空间:每一张表都会生成独立的文件来进行存储,每一张表都有一个.frm表描述文件,和一个.ibd文件。其中ibd文件包括了单独一个表的数据内容和索引内容。
共享表空间:某一个数据库的所有表的数据和索引文件都放在一个文件下,默认的文件是.ibdata1文件,初始值是10M,默认是存放在数据文件的根目录下(mysql/var)。
在性能和运维上独立表空间比共享的表空间有很多优势
共享表空间
优点:
表空间可以分成多个文件存放到各个磁盘,所以表也就可以分成多个文件存放在磁盘上,表的大小不受磁盘大小的限制(很多文档描述有点问题)。
数据和文件放在一起方便管理
缺点:
多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。
共享表空间分配后不能回缩
进行数据库的冷备很慢,mysqldump是一个好的处理方式
独立空间
优点:
- 每个表都有自已独立的表空间。
- 每个表的数据和索引都会存在自已的表空间中。
- 可以实现单表在不同的数据库中移动。
- 空间可以回收
缺点:
单表增加过大,响应也是较慢,可以使用分区表
单表增加过大,当单表占用空间过大时,存储空间不足,只能从操作系统层面思考解决方法
共享表空间和独立表空间之间的转换
1.查看当前表空间情况:
1 | show variables like '%per_table' ; |
ON代表独立表空间管理,OFF代表共享表空间管理;
2.修改数据库的表空间管理方式
修改配置文件 ,在/etc/my.cnf文件中设置
innodb_file_per_table=1 为使用独占表空间
innodb_file_per_table=0 为使用共享表空间
重启mysql
3.共享表空间转化为独立表空间的方法
(1)需要设置innodb_file_per_table=1
(2)单个表
alter table table_name engine=innodb;
很多表
先把数据库导出,然后删除数据再进行导入操作,该操作可以用mysqldump进行操作
总结:
经过以上操作便完成数据库的存储空间的转换
当数据量很小的时候建议使用共享表空间的管理方式。数据量很大的时候建议使用独立表空间的管理方式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)