mysql mysiam innodb的区别
1,存储文件
mysiam:数据恢复可以直接拷贝下面三个文件
.frm 文件保存表的结构
.MYD 数据
.myi 索引
innodb:数据恢复必须停掉mysql,然后在恢复
.frm 表结构
共享表空间进行数据与索引存储
表空间文件
- 共享表空间文件:ibdata1
- 私有表空间文件:表名.ibd
2,设计理念
mysiam:高性能读取
innodb:高并发读写
3,锁级别
mysiam:表锁,insert,update会锁表
innodb:行锁,不确定扫描范围锁表
4,事务与外键
mysiam:不支持
innodb:支持 transaction commit rollback
5,索引
mysiam:支持fulltext
innodb:不支持fulltext,缓存索引本身,同事缓存数据,内存消耗较大
其他:
1、InnoDB不支持FULLTEXT类型的索引,MySQL5.6之后已经支持(实验性)。 2、InnoDB中不保存表的 具体行数,也就是说,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作是一样的。 3、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。 4、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 5、LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。 6、另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。
适用范围:
MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。 InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。