mysql引擎问题研究
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引擎问题研究的更多相关文章
- mySql引擎
摘自: http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html MySql引擎很多,最常见的有InnoDB,MyISAM,NDM ...
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...
- 深入浅析mysql引擎
mysql引擎 mysql数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译mysql.在缺省情况下,mysql支持三个引擎:ISAM,MYISAM和HEAP.另 ...
- Django模板引擎的研究
Django模板引擎的研究 原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not f ...
- Spring事务mysql不回滚:mysql引擎修改
若Spring中@Transactional 注解开启且配置没问题的话,很可能是mysql数据库引擎不支持. mysql引擎是MyISAM的话事务会不起作用,原因是MyISAM不支持事务和外键,改成支 ...
- windows 虚拟环境下 安装 mysql 引擎一系列错误处理
报错现象 运行django 报错. 很明显是缺少引擎 下载引擎 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb m ...
- 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序
1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化? 资源竞争导致死锁,比如A B 同时操作两条记录,并等待对方释放锁. 优化sql, 加缓存,主从(如读写分 ...
- MySQL · 引擎特性 · InnoDB index lock前世今生
http://mysql.taobao.org/monthly/2015/07/05/ MySQL · 引擎特性 · InnoDB index lock前世今生 前言 InnoDB并发过程中使用两类锁 ...
随机推荐
- 解决Pods Unable to find a specification for `xxxxx`问题
错误信息为 Unable to find a specification for *RMQClient* (~> 1.x.x) depended upon by Podfile 刚开始以为这个已 ...
- static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
总结: 1.无论一个类实例化多少对象,它的静态变量只有一份拷贝: 静态域属于类,而非由类构造的实例化的对象,所有类的实例对象共享静态域. class Employee { private static ...
- [数据挖掘课程笔记]SLIQ算法
1.数据结构 主要的数据结构有:1.Attribute List 2.Class List 对于数据集,每一个属性都有一个对应的Attribute List.如上图所示,每个Attribute Li ...
- CoreGraphics(转)
2.CoreGraphics 上面我们讲过,UIBezierPath是CoreGraphics的封装,使用它可以完成大部分的绘图操作,不过更底层的CoreGraphics更加强大. CoreGraph ...
- Algorithm: Euclid's algorithm of finding GCD
寻找最大公约数方法 代码如下: int gcd (int a, int b) { return b ? gcd (b, a % b) : a; } 应用:求最小公倍数 代码如下: int lcm (i ...
- SpringSecurityLDap
ldap,用于用户登录的权限管理, 可参考:http://www.cnblogs.com/icuit/archive/2010/06/10/1755575.html
- Promise 源码分析
前言 then/promise项目是基于Promises/A+标准实现的Promise库,从这个项目当中,我们来看Promise的原理是什么,它是如何做到的,从而更加熟悉Promise 分析 从ind ...
- 疯狂LCM
传送门 题目要求求: \[\sum_{i=1}^nlcm(i,n)\] 先转化成gcd处理: \[n\sum_{i=1}^n\frac{i}{gcd(i,j)}\] 之后老套路 枚举gcd,并且先把d ...
- WinThruster中文版破解方法(注册表无伤清理工具)
每次卸载完软件,都会有注册表残余垃圾,久而久之电脑会越来越慢,winThruster可以检测出系统无用注册表,并删除. 1.解压文件,安装Setup_WinThruster_2015.exe文件. 2 ...
- This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended
VS2005转换成VS2010时出现的问题: This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x05 ...