面试经常遇到的问题,理解对工作也有一定帮助,一起来看看吧~ ps:1024,祝大家都不掉头发,哈哈~
innodb | myisam | |
---|---|---|
存储结构 | 所有的表都保存在同一个数据文件中(也可能是多个文件或独立的表空间文件),innodb表的大小只受限于操作系统文件的大小,一般为2GB。 | 每张表被存放在3个文件 ①frm表格定义 ②MYD(MYData)-数据文件 ③MYI(MYIndex)-索引文件 |
事务安全 | 支持 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表 | 不支持,每次查询具有原子性 |
锁 | 支持表锁、行锁,行锁大幅度提高了多用户并发操作的性能,但innodb的行锁只是在where的主键是有效的,非主键的where都会锁全表的 | 只支持表锁 |
全文索引 | 不支持 | 支持 |
外键 | 支持 | 不支持 |
select、insert、update、delete | insert、update、delete更优,delete时,它不会重新建立表,而是一行一行的删除 | select更优 |
AUTO_INCREMENT | InnoDB中必须包含只有该字段的索引 | MyISAM表可以和其他字段一起建立联合索引 |
count without where | InnoDB没有保存表的具体行数,需要逐行扫描统计,就很慢了 | MyISAM更优。因为MyISAM保存了表的具体行数 |
count with where | 一样,InnoDB也会锁表 | 一样 |
存储空间 | InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引 | MyISAM可被压缩,存储空间较小 |
可移植性、备份及恢复 | 免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了 | 由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作 |