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. ubuntun16.04不支持intel的最新网卡,升级到17.10后解决

    新买的神舟战神电脑.装了ubuntu16.04版本.但是安装后无线网卡无法使用无线网卡型号:是intel的一款网卡02:00.0 Network controller [0280]: Intel Co ...

  2. ORACLE函数之单行转换函数

     1           ASCIISTR 格式:ASCIISTR(C) 说明:将字符串C转换为ASCII字符串,即将C中的ASCII字符保留不变,但非ASCII字符则以ASCII表示返回 举例: ...

  3. Mac下文件编码转换

    参见:http://bbs.feng.com/read-htm-tid-107633.html 使用: sudo find *.txt -exec sh -c "iconv -f GB180 ...

  4. vue程序中组件间的传值方式

    vue程序在组件中进行传值有多种方式,这里记录我在项目中使用到的三种: 1. 父组件向子组件传值 2. 子组件向父组件传值 3. 通过路由传参 父组件通过props向子组件传值 在子组件script中 ...

  5. HDU4045 Machine scheduling —— 隔板法 + 第二类斯特林数

    题目链接:https://vjudge.net/problem/HDU-4045 Machine scheduling Time Limit: 5000/2000 MS (Java/Others)   ...

  6. 分布式session之redis解决方案实现

    一.首先Session Session 是客户端与服务器通讯会话技术, 比如浏览器登陆.记录整个浏览会话信息.session存放在服务器,关闭浏览器不会失效. Session实现原理 客户对向服务器端 ...

  7. error MSB6006: “CL.exe”已退出,代码为 -1073741502。

    错误1error MSB6006: “CL.exe”已退出,代码为 -1073741502.C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Plat ...

  8. 对xml文件的sax解析(增删改查)之一

    crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...

  9. centos服务器安装配置Postgre9.6

    安装: STEP1:下载对应rpm yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64 ...

  10. 最基本PSO算法的C++实现

    按照James Kennedy & Russell Eberhart (1995)的版本,算法过程如下: [x*] = PSO() P = Particle_Initialization(); ...