随笔 - 303  文章 - 0  评论 - 3  阅读 - 15万

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='…'

    

 

 

 

    

 

 

posted on   池塘里洗澡的鸭子  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示