mysql的 InnoDB 和 MyISAM 区别

1.InnoDB不支持FULLTEXT类型的索引。
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特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

 

 

 【12/09/16 附加】

MyISAM 不支持外键和事务,innodb 支持

MyISAM 和 Innodb 对数据信息的存储处理方式不同。

 

MYISAM 引擎的表 创建数据表时会创建三个文件,

frm 表结构文件

myd 数据文件

myi 索引文件

 

Innodb 引擎的表只创建一个

frm 表结构文件

而数据文件在 data目录下的 ibdate1 文件内。(所有库中所有表的数据都保存在这里)

 

在删除不同引擎的表数据时也有不同的结果

对于 MyISAM 引擎的表来说 删除数据 他不会重新整理数据表以及索引表。

所以需要定期清理 MyISAM 引擎的表 通常的做法是

optimize table  表名

他会重列数据表以及索引表,也是对表的一种优化的手段。

 

另外在导入(插入)大批量数据时候

对于 MyISAM

alter table 表名 disable keys;    

导入数据

alter table 表名 enable keys;

 

对于 innodb

1:将要导入的数据按照主键排序

2:set unique_checks=0 关闭 唯一性效验

3:set autocommit=0 关闭自动提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值