MySQL维护之存储引擎(表类型)
MySQL中的数据用各种不同的技术存储在文件(或内存)中。在MySQL架构原理之体系架构 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中可以看到其在MySQL中的第3层。
官方提供的存储引擎有:InnoDB/MyISAM等;第三方存储引擎中比较有名的有:TokuDB/XtraDB等。其中,最常见的两种存储引擎是MyISAM和InnoDB。通过show engines命令可以参考当前使用数据库支持的存储引擎。
关于InnoDB可以参考MySQL架构原理之存储引擎InnoDB存储结构 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com),本文主要介绍另一种常用的存储引擎MyISAM。
MyISAM存储引擎管理非事务表,提供高速缓存和减少,以及全文搜索能力。其存储组成如下:
每个MyISAM在磁盘上存储成3个文件。每个文件的名字就是表的名字,文件名与表名相同,扩展名指出了文件类型。需要注意的事,其不缓存数据文件,仅缓存索引文件,具体如下:
1、表定义的扩展名为.frm(frame,存储表定义)。
2、数据文件的扩展名.MYD(MYData,存储数据)。
3、索引文件的扩展名是.MYI(MYIndex,存储索引)。
数据文件和索引文件可以放置在不同的目录,平均分布I/O以获得更快的速度。同时其索引时压缩的,能加载更多索引——这样内存使用率就相应提供不少也节约了一些磁盘空间。
与InnoDB对比,它们的差异可以在下表中体现:
对于存储引擎如何进行批量更改呢?有如下方式:
1、使用M有SQL命令语句修改:altertable
alter table xxx engine=InnoDB|MyISAM|…
该方式简单适用于所有的引擎,同时其缺点也比较明显:
1)需要大量的I/O,因为MySQL需要执行从旧表到新表的一行一行的复制,效率及其低。
2)在转换期间源表加了读锁。
3)从一种引擎到另一种引擎做表转化,所有属于原始引擎的专用特性都会丢失。比如从InnoDB到MyISAM,InnoDB的索引都会丢失。
2、使用dump(转储),然后import(导入)
使用mysqldump这个工具将修改的数据导出后会以.sql的文件保存,可以对这个文件进行操作和更多的控制,比如修改表名、修改存储引擎等。
3、CREATESELECT
以上方式中,第一种方式简便,第二种方式安全。此种方式是以上两种方式的折中,过程如下示:
1)CREATE TABLE NEW_TABLE LIKE OLD_TABLE;
2)ALTER TABLE NEW_TABLE ENGINE=innodb|myisam|…;
3)INSERT INTO NEW_TABLE SELECT * FROM OLD_TABLE
4、使用sed对备份内容进行引擎转换
nohup sed -e 's/MyISAM/InnoDB/g' new....sql > new....sql
5、mysql_convert_table format 命令修改
mysql_convert_table format --host=‘…’ --uset='…' --password='…' --socket='…' --type='…'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?