zoukankan      html  css  js  c++  java
  • 27

    MyISAM和InnoDB的区别
    定义
    InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

    MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。

    事务
    InnoDB:支持

    MyISAM:不支持


    InnoDB:支持行锁、表锁。行锁是实现在索引上的,如果没有索引,就没法使用行锁,将退化为表锁。

    MyISAM:支持表锁。

    主键
    InnoDB:必须有,没有指定会默认生成一个隐藏列作为主键

    MyISAM:可以没有

    索引
    InnoDB:聚集索引,使用 B+ 树作为索引结构,数据文件和索引绑在一起,必须要有主键。主键索引一次查询;辅助索引两次查询,先查询主键,再查询数据;

    MyISAM:非聚集索引,使用 B+ 树作为索引结构,索引和数据文件是分离的。主键索引和辅助索引是独立的。

    外键
    InnoDB:支持

    MyISAM:不支持

    AUTO_INCREMENT
    InnoDB:必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

    MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。

    数据库文件
    InnoDB:frm是表定义文件,ibd是数据文件。支持两种存储方式:

    共享表空间存储:所有表的数据文件和索引都保存在一个表空间里,一个表空间可以有多个文件,通过 innodb_data_file_path 和 innodb_data_home_dir 参数设置共享表空间的位置和名字,一般共享表空间的名字叫 ibdata1-n。
    多表空间存储:每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开关,以.ibd为扩展名
    MyISAM:frm是表定义文件,myd是数据文件,myi是索引文件。支持三种存储格式:静态表(默认,注意数据末尾不能有空格,会被去掉。)、动态表、压缩表。

    表的行数
    InnoDB:没有保存。select count(*) from table;会扫描全表。

    MyISAM:保存。select count(*) from table;会直接取出该值。

    注:但加了 where 条件后,两者处理方式一样,都是扫描全表。

    全文索引
    InnoDB:5.7及以后版本支持。

    MyISAM:支持。

    总结
    InnoDB:

    优点:支持事务,支持外键,并发量较大,适合大量 update。
    缺点:查询数据相对较快,不适合大量的 select。
    MyISAM:

    优点:查询数据相对较快,适合大量的 select,可以全文索引。
    缺点:不支持事务,不支持外键,并发量较小,不适合大量 update。
    如何选择?
    你的数据库有外键吗?如有,选择 InnoDB。
    你需要事务支持吗?如需要,选择 InnoDB。
    你需要全文索引吗?在5.7及以后版本,都可选,优先考虑 InnoDB + Sphinx。
    你经常使用什么样的查询模式?如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB。
    你的数据有多大?数据量大,选择 InnoDB,因为其支持事务处理和故障恢复。MyISAM 可能需要几小时或几天来恢复,InnoDB 只需要几分钟。
    你需要在线热备份吗?如需要,选择 InnoDB。

  • 相关阅读:
    Styles和Themes
    Activity返回值
    Android BaseAdapter 例子
    Android流量统计TrafficStats类的使用
    Javascript屏蔽IE和Firefox浏览器默认按键响应(快捷键功能)
    拍照技巧笔记
    android开发录音和播放录音的例子
    Eclipse快捷键大全(android开发)
    Android SQLite 添加、更新和删除行
    绑定Enum到ASP.NET数据绑定控件的完美解决方案[05/26修订]——增加支持第三方枚举描述,支持二进制与过的枚举值
  • 原文地址:https://www.cnblogs.com/gd11/p/14215763.html
Copyright © 2011-2022 走看看