转载:http://www.php100.com/html/webkaifa/database/Mysql/2011/0326/7789.html

MyISAM 和 InnoDB 讲解

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

  以下是一些细节和具体实现的差别:

  ◆1.InnoDB不支持FULLTEXT类型的索引。

  ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

  ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

  ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

  ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

  我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。

  原因如下:

  1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。

  2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

  3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。

  4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

  5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

  6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

  7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

  当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。

  另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。

转载于:https://www.cnblogs.com/lanhzbupt/p/4197056.html

MyISAM InnoDB 区别相关推荐

  1. mysql myisam innodb 区别

    最近连续接到了两次tencent的电话面试,当然不是同一个部门.都涉及到了一个mysql的基础知识问题.为了防止第三次打电话来,备注下.^^. 题目1:讲讲你对mysql myisam,innodb的 ...

  2. [转载]MyISAM InnoDB 区别

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别 为:MyISAM类型不支持事务处理等高级 ...

  3. MyISAM与InnoDB区别

    MyISAM,默认类型,基于传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问的方法)的缩写,是存储记录和文件的标准方法. 与其他存储引擎 ...

  4. InnoDB和MyISAM的区别与选择

    MyISAM 性能(适合小项目,读快速)MyISAM 是MySQL中默认的存储引擎,比如适合新闻系统,读为主. InnoDB 事务或外键支持(适合大项目,高并发读写)活跃用户20多万时候,也能很轻松应 ...

  5. innodb和myisam的区别

    innodb和myisam的区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是 ...

  6. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!

    MYSQL中engine=innodb和engine=myisam的区别和用法! 区别 1.myisam类型不支持事务处理等高级处理,而innodb类型支持. 2.myisam类型的表强调的是性能,其 ...

  7. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过 ...

  8. InnoDB与MyISAM引擎区别

    mysql中InnoDB与MyISAM两种数据库引擎的区别: 一.InnoDB引擎: 1.支持事务性, 2.支持外部键, 3.行级锁, 4.不保存表的具体行数,执行select count(*) fr ...

  9. Mysql 存储引擎有哪些以及MyISAM和InnoDB区别

    1.InnoDB 存储引擎 InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB 是默认的 MySQL引擎. 2.MyISAM 存储引擎 MyISAM 基 ...

最新文章

  1. 用python的turtle画圆-怎么用python画圆
  2. python嵌套字典代码_python – 尝试在嵌套字典中查找唯一值的总和. (见例子!)
  3. linux 内存显示括号内字母的含义
  4. XCTF-MISC-新手区-gif
  5. ### C++总结-[类成员函数]
  6. 小鹏N5申报图曝光 搭载155KW电机、NEDC 600公里与P5相同
  7. 【Flink】Flink 源码之OperatorChain
  8. [误将两块磁盘挂载到根目录][解决办法]
  9. spring mvc文件上传与下载
  10. 程序化(量化)交易怎样选择服务器
  11. HMI车载开发:汽车与Android的关系:Android Automotive
  12. 华为me909s与MT2503拨号上网流程总结
  13. Qt 实现双滑块滑条 range slider
  14. 非线性规划:实例与matlab应用
  15. nodejs调用java的jar包进行PPT转pdf
  16. 中国“钱”途最光明10所大学
  17. 三菱FX3U/FX1N底层源码,PLSR源码, 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,支持脉冲输出与定位指令(包括PLSY /PWM/PLSR/PLSV/DRVI /DRV
  18. 散转程序c语言,单片机 散转程序设计 软件实验
  19. 二维码解码器Zbar+VS2012开发环境配置
  20. 查找字符串fing()函数

热门文章

  1. 华为S5348交换机基本配置
  2. ibm xml专区中对XPATH的一个好文
  3. Python学习之路-装饰器生成器正则表达式
  4. RHEL7 timedatectl命令
  5. Streaming源码解读之接收流数据的全生命周期
  6. 用户一亿的网易新闻客户端质量如何?
  7. 太多脚本将会毁掉持续交付
  8. json字符串拼接 json_encode 数组带有花括号{}和中括号[]
  9. python 参数
  10. VC++在对话框中加入属性页