mysql的引擎中MyISAM和InnoDB的区别

mysql的引擎中MyISAM和InnoDB的区别?

  1. 事务支持
    * MyISAM,不支持事务,是非事务安全性的,每次查询都是原子性的;
    * InnoDB,支持事务,是事务安全性的。InnoDB中,默认自动提交。

  2. 存储结构不同
    * MyISAM,每个表在磁盘上存于三个文件。.frm存储表定义,.MYD存储数据文件,.MYI存储索引文件
    * InnoDB,所有表在磁盘上都存于一个文件(也可能是多个文件,或者是独享表空间文件) .ibddata。独享表空间的话,每个库都是一个单独的文件夹,每张表对应两个文件,.frm、.ibd。

  3. 存储空间
    * MyISAM,可被压缩,存储空间较小。支持三种存储方式,静态表(默认)、动态表、压缩表;
    * InnoDB,需要更多的内存和存储,会在主内存中建立其专用的缓冲池用于高效缓存和索引。

  4. 可移植性、备份和恢复
    * MyISAM,由于其数据是存于不同的文件中,所以方便移植,并且可以针对单独的表进行备份和恢复;
    * InnoDB,拷贝数据文件,备份binlog,mysqldump等操作在数据量大的时候,会比较痛苦。

  5. 锁差异
    * MyISAM,只支持表级锁;
    * InnoDB,支持行级锁。

> 全文索引是指对char、varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。MyIsam索引和数据分离,InnoDB在一起,MyIsam天生非聚簇索引,最多有一个unique的性质,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为“聚簇索引”。
  1. 全文索引
    * MyISAM,支持全文索引;
    * InnoDB,不支持全文索引。

  2. 表主键
    * MyISAM,允许没有主键和索引的表存在;
    * InnoDB,表必须有主键,如果不指定主键,就是指定生成一个6个字节的主键,用户不可见。

  3. 表索引
    * MyISAM,索引和数据分离,是非聚集索引,最多有一个unique索引。索引中的指针中存储的是,该行数据所在的地址;
    * InnoDB,数据文件本身就是索引文件,被称为聚簇索引。索引中的指针存储的是主键索引。

  4. 外键
    * MyISAM,支持;
    * InnoDB,不支持。

posted @ 2019-04-13 16:28  boolstyle  阅读(148)  评论(0)    收藏  举报