myisam和innodb区别
时间:2021-07-01 10:21:17
帮助过:25人阅读
对比
|
innoDB |
MYISAM |
数据存储方式 |
innoDB的数据存在表空间中,表空间是由innoDB管理的一个黑盒子,由一系列的数据文件组成,所以其大小限制不再是文件大小的限制。4.1以后的版本,innoDB可以将每个表的数据和所有单独放在单独的文件里,所有其大小限制变成文件系统的大小限制。决定存储方式的配置为innodb_file_per_table,若为1则开启独占表空间。
|
MYISAM将数据保存在以.MYD的文件中,将索引保存在.MYI文件中。其表大小受限文件系统的大小。 |
事务处理 |
innoDB支持事务和外键等高级数据库功能 |
不支持事务 |
select、update、
insert、
delete操作
|
如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,如果要清空保存有大量数据的表,最好使用truncate table这个命令。
LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
|
如果执行大量的select操作MYISAM是更好的选择 |
表的具体行数 |
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行
|
select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的 |
锁 |
InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时mysql不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%” |
表锁 |
AUTO_INCREMENT |
InnoDB中必须包含该字段的索引,若该字段仅建立一个联合索引时,必须作为联合索引的一个值 |
在MYISAM只要求包含该字段索引 |
myisam和innodb区别
标签:解决方法 cap apt 语句 from span nod ast 保存