15.2.6.2. 转换MyISAM表到InnoDB
来源:互联网 发布:中标数据网手机版 编辑:程序博客网 时间:2024/05/22 04:58
15.2.6.2. 转换MyISAM表到InnoDB
要点:你不应该在mysql数据库(比如,user或者host)里把MySQL系统表转换为InnoDB类型。系统表总是MyISAM型。
如果你想要所有(非系统)表都被创建成InnoDB表,你可以简单地把default-table-type=innodb行添加到my.cnf或my.ini文件的[mysqld]节里。
InnoDB对MyISAM存储引擎采用的单独索引创建方法没有做专门的优化。因此,它不值得导出或导入表以及随后创建索引。改变一个表为InnoDB型最快的办法就是直接插入进一个InnoDB表。即,使用ALTER TABLE ... ENGINE=INNODB,或用相同的定义创建一个空InnoDB表,并且用INSERT INTO ... SELECT * FROM ...插入行。
如果你对第二个键有UNIQUE约束,你可以在导入阶段设置:SET UNIQUE_CHECKS=0,以临时关掉唯一性检查好加速表的导入。对于大表,这节省了大量的磁盘I/O,因为InnoDB随后可以使用它的插入缓冲区来第二个索引记录作为一批来写入。
为获得对插入进程的更好控制,分段插入大表可能比较好:
INSERT INTO newtable SELECT * FROM oldtable
WHERE yourkey > something AND yourkey <= somethingelse;
所有记录已经本插入之后,你可以重命名表。
在大表的转换中,你应该增加InnoDB缓冲池的大小来减少磁盘I/O。尽管如此,不要使用超过80%的内部内存。你也可以增加InnoDB日志文件和日志文件的大小。
确信你没有填满表空间:InnoDB表比MyISAM表需要大得多的磁盘空间。如果一个ALTER TABLE耗尽了空间,它就开始一个回滚,并且如果它是磁盘绑定的,回滚可能要几个小时。对于插入,InnoDB使用插入缓冲区来以成批地合并第二个索引记录到索引中。那样节省了大量磁盘I/O。在回滚中,没有使用这样的机制,而回滚要花比插入长30倍的时间来完成。
在失控的回滚情况下,如果你在数据库中没有有价值的数据,比较明智的是杀掉数据库进程而不是等几百万个磁盘I/O被完成。 完整的过程,请参阅15.2.8.1节,“强制恢复”。
- 15.2.6.2. 转换MyISAM表到InnoDB
- myisam 表 转换为 innodb 表
- MyISAM 升级到 InnoDB
- MySQL从MyISAM引擎转换到InnoDB引擎需要注意的地方
- mysql 存储引擎(MyISAM/InnoDB)转换
- MySQL 表修复 MyISAM & InnoDB
- innodb和myisam表排序
- mysql下如何更改database下所有表的数据引擎--MyISAM 到InnoDB
- mysql数据库-innodb表、myisam表
- mysql表类型MyISAM和InnoDB比较
- mysql表类型MyISAM和InnoDB比较
- mysql 表种类MYISAM,innodb详解
- mysql表类型MyISAM和InnoDB区别
- mysql表类型MyISAM和InnoDB区别
- MySQL 表结构MyISAM 和 InnoDB 讲解
- mysql表类型MyISAM和InnoDB区别
- MYSQL复制源文件 丢失问题解决, innoDB 类型转换为 MyISAM
- mysql的编码问题引起MyISAM转换InnoDB
- 春节回家啦
- CreateFile函数祥解
- 终于会用VC封装dll了……
- ASP.NET Application,Session,Cookie,ViewState和Cache之间的区别
- VC 单文档快捷键编程
- 15.2.6.2. 转换MyISAM表到InnoDB
- php注释标准
- 新年
- SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块 【转】
- Delphi部分函数、命令、属性中文说明
- 敏捷建模(AM:agilemodeling.org)极限编程(XP:extremprogramming.org)
- PLC初学者梯形图编程原则
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 判断字符串是否全为数字