mysql的引擎中MyISAM和InnoDB的区别
mysql的引擎中MyISAM和InnoDB的区别?
-
事务支持
* MyISAM,不支持事务,是非事务安全性的,每次查询都是原子性的;
* InnoDB,支持事务,是事务安全性的。InnoDB中,默认自动提交。 -
存储结构不同
* MyISAM,每个表在磁盘上存于三个文件。.frm存储表定义,.MYD存储数据文件,.MYI存储索引文件
* InnoDB,所有表在磁盘上都存于一个文件(也可能是多个文件,或者是独享表空间文件) .ibddata。独享表空间的话,每个库都是一个单独的文件夹,每张表对应两个文件,.frm、.ibd。 -
存储空间
* MyISAM,可被压缩,存储空间较小。支持三种存储方式,静态表(默认)、动态表、压缩表;
* InnoDB,需要更多的内存和存储,会在主内存中建立其专用的缓冲池用于高效缓存和索引。 -
可移植性、备份和恢复
* MyISAM,由于其数据是存于不同的文件中,所以方便移植,并且可以针对单独的表进行备份和恢复;
* InnoDB,拷贝数据文件,备份binlog,mysqldump等操作在数据量大的时候,会比较痛苦。 -
锁差异
* MyISAM,只支持表级锁;
* InnoDB,支持行级锁。
> 全文索引是指对char、varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。MyIsam索引和数据分离,InnoDB在一起,MyIsam天生非聚簇索引,最多有一个unique的性质,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为“聚簇索引”。
-
全文索引
* MyISAM,支持全文索引;
* InnoDB,不支持全文索引。 -
表主键
* MyISAM,允许没有主键和索引的表存在;
* InnoDB,表必须有主键,如果不指定主键,就是指定生成一个6个字节的主键,用户不可见。 -
表索引
* MyISAM,索引和数据分离,是非聚集索引,最多有一个unique索引。索引中的指针中存储的是,该行数据所在的地址;
* InnoDB,数据文件本身就是索引文件,被称为聚簇索引。索引中的指针存储的是主键索引。 -
外键
* MyISAM,支持;
* InnoDB,不支持。

浙公网安备 33010602011771号