mysql引擎问题研究

数据库引擎

缺省情况下,MYSQL支持三个引擎:ISAM,MYISAM和HEAP。还存在MYSQL+API的引擎例如InnoDB。

数据库引擎特点

ISAM:执行读取操作速度很快,且不占用大量内存和存储资源。不足之处在于,不知此食物,不能够容错。硬盘崩溃,数据文件无法恢复。不支持事务。

MyISAM:ISAM的扩展。扩展了索引和字段管的大量功能。使用了表格锁定机制,来优化并发的读写操作,需要经常使用优化表命令,来恢复被更新机制所浪费的空间。强调快速读取操作。缺陷是,不能够在表损坏后恢复数据。不支持事务。

HEAP:允许只驻留在内存里的临时表格。所以速度比ISAM和MYISAM速度更快,但是数据不稳定,如果在关机之前没有进行保存,数据就会丢失。用完表格之后删除。

InnoDB:MYSQL+API。存在事务支持和外来键问题。比ISAM和MYISAM引擎慢。

MyISAM和InnoDB的区别

基本的区别是,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 tablename FROM MASTER操作对InnoDB不起作用。LOAD TABLE FROM MASTER仅对于MyISAM表起作用。用于把表的拷贝从主服务器转移到从属服务器。要求用于连接主服务器的帐户拥有对主服务器的RELOAD和SUPER权限以及SELECT权限。

另外,InnoDB表的行锁也不是绝对的。例如,update table set num=1 where name like “a%”,将会锁全表。

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

注:

1.事务可以在逻辑业务层控制。

2.MyISAM的索引与数据分开,并且有压缩,内存的使用率对应提高了不少,可以加载更多的索引。InnoDB的索引是紧密捆绑,没有使用压缩,体积比MyISAM庞大。

3.对于数据的导入导出有很大的影响。数据量很大的情况下,不适合导出sql。MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

4.select count(*) 和order by频繁使用,而这种操作Innodb其实也是会锁表的。很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

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

使用

MyISAM适合:

(1)做很多count 的计算;

(2)插入不频繁,查询非常频繁;

(3)没有事务。

InnoDB适合:

(1)可靠性要求比较高,或者要求事务;

(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建
让所有的灵活性成为可能的开关是提供给ANSI SQL的MySQL扩展——TYPE参数。MySQL能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是table formats。

其他

MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

最新文章

  1. jQuery通过parent()和parents()方法访问父级元素
  2. HTML5 — 让拖放变的流行起来
  3. Xshell 中文乱码
  4. CocoaPods的安装及使用/利用开源库Diplomat实现分享及第三方登录/git的使用
  5. 很不错的文章---【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群
  6. Lua学习教程之 可变參数数据打包与解包
  7. 模型类中 Parcelable 接口使用
  8. 一步步教你使用rem适配不同屏幕的移动设备
  9. 基于FFMPEG的跨平台播放器实现
  10. 自己动手实现mybatis动态sql
  11. selenium的一些使用方法
  12. 【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效
  13. pyzmq学习笔记
  14. sql server中的全局变量,常用的没有多少...以后看看就行
  15. easyUI使用datagrid-detailview.js实现多级级列表嵌套
  16. SQLmap注入启发式检测算法
  17. Java - fail-fast机制
  18. [转]Maven - 环境配置
  19. 程序媛计划——mysql外键
  20. CentOS6.5本地yum源配置

热门文章

  1. Spring MVC的映射请求
  2. Thumbelina,摘自iOS应用Snow White and more stories
  3. 第三章 Java 的基本程序设计结构
  4. spring定时器的配置
  5. Boost 库编译总结
  6. Vue中的计算属性和监听器(computed 与 watch)
  7. Codeforces Round #394 (Div. 2) B. Dasha and friends —— 暴力 or 最小表示法
  8. html5--5-3 给直线添加样式
  9. bootstrap 学习笔记(5)---- 图片和响应式工具
  10. Rsyslog 日志相关内容