MySQL InnoDB和MyISAM数据引擎的差别分析_Mysql

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyIASM是IASM表的新版本,有如下扩展:
二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。

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

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%”

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

时间: 2024-09-10 11:28:19

MySQL InnoDB和MyISAM数据引擎的差别分析_Mysql的相关文章

MySQL数据库InnoDB和MyISAM数据引擎的差别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是IASM表的新版本,有如下扩展: 1. 二进制层次的可移植性. 2. NULL列索引. 3. 对变长行比ISAM表有更少的碎片. 4. 支持大文件. 5. 更好的索引压缩

mysql中InnoDB和MyISAM存储引擎区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是IASM表的新版本,有如下扩展: ·二进制层次的可移植性. ·NULL列索引. ·对变长行比ISAM表有更少的碎片. ·支持大文件. ·更好的索引压缩.

关于InnoDB和MyISAM数据存储特性的研究

InnoDB和MyISAM是MySQL最重要的两种数据存储引擎,两者都可用来存储表和索引,InnoDB的索引和表 存储在同一个文件中,MyISAM的索引和表存储在不同文件,但即使多个索引,也共存于一个文件. 网络上很多比较都是基于两者的事务性处理和锁处理机制等,似乎InnoDB比MyISAM没有缺点了.但研 究发现,MyISAM在数据特别是索引存储方面具有突出的优势,下面就此开展讨论. 1. 研究结论 1)InnoDB占用磁盘空间比MyISAM大,MyISAM存储数据可节省空间12%,存储索引可

MYSQL 浅谈MyISAM 存储引擎_Mysql

思维导图      介绍          mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对<高性能MYSQL>书中提到的myisam的理解,请大家多多指教.    特点   > 不支持事务     证明如下:      >> 表记录:t2表的engine是myisam.       >> 操作 注意:如果你在数据库进行事务操作,但是事务无法成功,你就要看你的表引擎了,看这种引擎是否

MYSQL 浅谈MyISAM 存储引擎

思维导图    介绍        mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对<高性能MYSQL>书中提到的myisam的理解,请大家多多指教.  特点 > 不支持事务   证明如下:     >> 表记录:t2表的engine是myisam. >> 操作 注意:如果你在数据库进行事务操作,但是事务无法成功,你就要看你的表引擎了,看这种引擎是否支持事务.>> 下面请

【Mysql 学习】MyISAM存储引擎(一)。

MyISAM是默认存储引擎. 每个MyISAM在磁盘上存储成三个文件. 第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名是.MYI (MYIndex). 想要用一个MyISAM表格,可以使用如下语句: CREATE TABLE t (i INT) ENGINE = MYISAM; 一般地,ENGINE选项是不必要的:除非默认已经被改变了,MyISAM是默认存储引擎. 如下是MyISAM存储引擎的一些特征

关于ORACLE 和MYSQL INNODB 触发脏数据写的机制对比

首先要说明在ORACLE和INNODB触发checkpoint方面都采用LRU进行管理,并且都有全量检查点和增量检查点一说 在MYSQL中全量检查点叫做sharp checkpoint,增量检查点叫做FUZZY CHECKPOINT, 在ORACLE中更加细化,加入了LRUW链表,并且加入CHECKPOINT-Q列表,两者共同配合完成增量CHECKPOINT,在ORACLE 中DBWR写是按照CHECKPOINT-Q的顺序写的其是LRBA的链表,其触发条件受到MTTR的限制,如果ORACL估计能

【Mysql 学习】MyISAM存储引擎(二)。

MyISAM表的存储格式 1. 静态(固定长度)表特征 2. 动态表特征 3. 已压缩表特征   MyISAM支持三种不同存储格式.其中两个(固定格式和动态格式)根据正使用的列的类型来自动选择.第三个,即已压缩格式,只能使用myisampack工具来创建.    当CREATE或ALTER一个没有BLOB或TEXT列的表,可以用ROW_FORMAT表选项强制表的格式为FIXED或DYNAMIC.这会导致CHAR和VARCHAR列因FIXED格式变成CHAR,或因DYNAMIC格式变成VARCHA

MYSQL innodb buffer 状态数据的保存和载入

本文参考官方手册 原创转载请注明出处 版本:MYSQL 5.7 当数据库重启后,buffer中的数据需要重新预热,所谓预热就是等待常用数据通过用户调用SQL语句从磁盘载入到内存, 这个过程ORACLE中叫做物理读取,对于较大的平台这个预热过程往往需要较大的代价,典型的就是第一次运行一个select 语句很慢,过后再次执行就很快了. 对于这种情况innodb默认在关闭和启动的时候都会保存和加载状态数据,由参数 innodb_buffer_pool_load_at_startup 和 innodb_