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的表的类型混合起来,甚至在同一个查询中也可以混合。

mysql引擎问题研究的更多相关文章

  1. mySql引擎

    摘自: http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html MySql引擎很多,最常见的有InnoDB,MyISAM,NDM ...

  2. MySQL · 引擎特性 · InnoDB 崩溃恢复过程

    MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...

  3. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...

  4. 深入浅析mysql引擎

    mysql引擎 mysql数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译mysql.在缺省情况下,mysql支持三个引擎:ISAM,MYISAM和HEAP.另 ...

  5. Django模板引擎的研究

    Django模板引擎的研究 原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not f ...

  6. Spring事务mysql不回滚:mysql引擎修改

    若Spring中@Transactional 注解开启且配置没问题的话,很可能是mysql数据库引擎不支持. mysql引擎是MyISAM的话事务会不起作用,原因是MyISAM不支持事务和外键,改成支 ...

  7. windows 虚拟环境下 安装 mysql 引擎一系列错误处理

    报错现象 运行django 报错. 很明显是缺少引擎 下载引擎 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb m ...

  8. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序

    1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化? 资源竞争导致死锁,比如A B 同时操作两条记录,并等待对方释放锁. 优化sql, 加缓存,主从(如读写分 ...

  9. MySQL · 引擎特性 · InnoDB index lock前世今生

    http://mysql.taobao.org/monthly/2015/07/05/ MySQL · 引擎特性 · InnoDB index lock前世今生 前言 InnoDB并发过程中使用两类锁 ...

随机推荐

  1. 组件的详细说明和生命周期ComponentSpecs and Lifecycle

    render ReactComponent render() render() 方法是必须的. 当调用的时候,会检测 this.props 和 this.state,返回一个单子级组件.该子级组件可以 ...

  2. LLVM的总结

    LLVM 写在前面的话:无意中看到的LLVM的作者Chris Lattner相关的介绍和故事,觉得很有意思就贴上来,如果不感兴趣,可以直接跳入下一章. 关于LLVM 如果你对LLVM的由来陌生,那么我 ...

  3. DTLS学习笔记 -- RFC 4347- 6347

    想学习一下dtls,是因为想以后没有公司免费VPN可用的时候,我能买一个主机,自己建一个VPN. 1.介绍 Web, email大多用TLS协议来做安全的网络传输,它们必须跑在可靠的TCP传输通道里. ...

  4. ThinkPHP RBAC权限管理机制

    RBAC是ThinkPHP很好用的后台权限管理的,话不多说,实现方法如下,也方便以后自己查询使用: 1.新建4个数据库表 self_role权限表 CREATE TABLE `self_role` ( ...

  5. jquery特效(8)—倒计时

    最近公司在做一个答题的小游戏,每道题可以有20秒时间作答,超过时间就要给出相应的提醒,由于20秒时间太长,不适合做GIF动态图,下面来看一下我写的5秒倒计时的测试程序结果: 一.主体程序: <! ...

  6. Kattis - whatdoesthefoxsay —— 字符串

    题目:  Kattis - whatdoesthefoxsay   Determined to discover the ancient mystery—the sound that the fox ...

  7. runtime之方法的交换

    工作中没怎么用到runtime的东西,所以一直没怎么看,现在开始拿起来. runtime之方法的交换: 都知道OC中有category可以对已知类进行扩展,但是假如工程中需要修改某类的原方法,若用ca ...

  8. opengl in medical imaging

    医学可视化 http://schorsch.efi.fh-nuernberg.de/roettger/index.php/Lectures/MedicalVisualization http://ww ...

  9. the art of seo(chapter six)

    Developing an SEO-Friendly Website ***Making Your Site Accessible to Search Engines***1.Indexable Co ...

  10. 【Redis笔记(四)】 Redis数据结构 - list链表

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...