MyISAM与InnoDB的区别

1. 存储结构:

  MyISAM:(文件名以表名开始)

    .frm文件存储表定义

    .MYD文件存储数据

    .MYI文件存储索引

  InnoDB:

    所有的表保存在同一个(也可能多个)数据文件中,表的大小仅受限于操作系统文件的大小,一般为2GB

2. 存储空间:

  MyISAM:

    可被压缩,存储空间较小。支持三种不同的存储格式:静态表、动态表、压缩表

    默认为静态表,数据末尾不能有空格,否则会将空格去掉

  InnoDB:

    更多的内存和存储空间。在内存中建立专用的缓冲池用于高速缓冲数据与索引

3. 可移植性、备份与恢复:

  MyISAM:以文件形式存储,转移方便。可单独针对某个表进行备份与恢复。

  InnoDB:相对痛苦

4. 事务支持:

  MyISAM:不支持事务

  InnoDB:支持事务ACID

5. Auto-Increment:

  MyISAM:自增长列必须为索引

  InnoDB:同样,但要求若是组合索引,自增长列必须为第一列

6. 表锁:

  MyISAM:表级锁

  InnoDB:行级锁,大大提高并行性

7. 全文索引:

  MyISAM:支持FULLTEXT

  InnoDB:本身不支持FULLTEXT,用sphinx插件后支持效果更好

8. 表主键:

  MyISAM:允许没有任何索引和Key的表存在

  InnoDB:不允许。若没有索引则自动生成一个6字节的索引(按照本人的理解是:行级锁加载索引上)

9. 表的具体行数:

  MyISAM:保存总行数,select count(*) from <table>;会取出该值

  InnoDB:不保存总行数,select count(*) from <table>;会遍历表,高能耗

  若加了where语句之后,二者相同

10. CURD:

  MyISAM:select语句的最好选择

  InnoDB:insert与update性能好,delete语句在InnoDB上效果更优,但是delete from <table>;语句InnoDB会进行逐行删除,最好改用truncate <table>

11. 外键FK:

  MyISAM:不支持

  InnoDB:支持

上一篇:HackerRank "Prim's (MST) : Special Subtree"


下一篇:快速幂取模 POJ 3761 bubble sort