MyISAM在存储结构上:每个MyISAM在磁盘上存储成三个文件。这三个文件分别是表定义文件,表定义文件的名字是以表的名子开始的,用扩展名指出文件类型。数据文件,这个文件用于存储数据,并且用frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件,这部分文件的拓展名是.MYI (MYIndex)。
InnoDB在存储结构上:InnoDB内部全部的表都保存在同一个数据文件中,InnoDB表的大小等于操作系统文件的大小,一般情况下为2GB。
存储空间上MyISAM: MyISAM支持支持三种不同的存储格式:静态表,这个表是默认存在的,但是需要注意的是数据末尾不能有空格,否则会被强制删除掉,动态表、压缩表。当表在创建并且导入数据之后,便不会再进行任何的修改操作,可以使用压缩表的方式,来极大的减少对磁盘的空间占用率。
InnoDB在存储空间上的表现:首先InnoDB需要占用更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
MyISAM和InnoDB都拥有可移植性、备份及恢复功能。但是相对来说MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),InnoDB的聚集索引必须要有主键,因为通过主键索引效率会更高。而使用辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引用来保存数据文件的指针。并且主键索引和辅助索引是相互独立的,互不相同,用法也不一样。
事务支持上MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
表主键MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据只是主索引的一部分,附加索引保存的是主索引的值。