文档章节

MySQL中的 MyISAM和InnoDB 区别

 北极之北
发布于 2017/11/02 11:15
字数 858
阅读 7
收藏 0

一:构成上的区别

每个MyISAM在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义。
数据文件的扩 展名为.MYD (MYData)。
索引文件的扩 展名是.MYI (MYIndex)。
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB

    MyISAM引擎设计简单,数据以紧密格式存储,并且由于分为三个文件,可以放到不同的磁盘,可以同时操作,磁盘IO更快;MyISAM 默认会把索引读入内存,直接在内存中操作;InnoDB 则是 I/O 操作;

  并且MyISAM索引是单独的文件,可以对索引进行压缩;

二:事务处理

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

MyISAM由于设计简单,不支持事物

三:锁




 

表锁

提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in
SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执 行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

innodb是行锁,myism是锁表,因此有innodb写更快的说法

在更新少,读取多的应用中,myism更快,虽然是表锁,但锁的时候少,利用索引分开优势,可以读入内存,快速查询。但是如果更新频繁,经常锁表,读取性能会极速下降。
innodb适合更新频繁的场景,否则更新效率也不如myism。innodb索引数据混在一个文件,建立索引比myism复杂,在更新不频繁的应用场景中,myism更快


四:表的具体行数

select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的 InnoDB 中不 保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

 

myisam属于堆表,数据写入一直累积(concurrent_insert参数设置为2);此时写入性能比innodb好,但是无论是主键查询还是非主键查询,都不可避免的需要二次io(除非能索引内完成字段记录返回)
innodb属于聚簇索引组织表(主键索引即数据),由于必须保证索引有序,在写入时需要找到合适的位置进行插入,有时候还会导致二叉树调整所以写入性能比myisam要差;但是主键查找时只需要一次io即可返回数据,非主键索引查询时如果在索引内不能完成查询记录返回则需要第二次的io

 

五:清空表

InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

 

六:InnoDB不支持FULLTEXT类型的索引

 

总结:mysql5.6之后,官方就不推荐MyISAM,InnoDB经过后面一系列优化之后,性能以及达到百万QPS,MyISAM基本等于废弃了!

 

 

 

 

本文转载自:无

粉丝 8
博文 23
码字总数 17514
作品 0
深圳
私信 提问
MySQL —— 存储引擎的 InnoDB 与 MyISAM 之争

作为 MySQL 数据库的两种主要的存储引擎,InnoDB 与 MyISAM 各有长处。 在 MySQL 5.1 及之前的版本中,MyISAM 是默认的存储引擎,而在 MySQL 5.5 版本以后,默认使用 InnoDB 存储引擎。 MyIS...

剧与
2017/09/21
20
0
MySQL存储引擎InnoDB与Myisam的六大区别

MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。 MySQL支持...

Junn
2013/12/11
13.9K
2
MySQL: MyISAM和InnoDB的区别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行...

crazyinsomnia
2010/03/07
12.7K
2
MyISAM InnoDB 区别

MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型...

菜到没谱
2012/09/12
274
0
数据库中MyISAM与InnoDB区别

数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引...

thinkyoung
2015/09/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[top]cpu内存

%Cpu(s): 96.0 us用户进程整理cpu的占比,按整个cpu算。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ......

Danni3
1分钟前
0
0
JavaScript权威指南笔记2

第二章、词法结构 1、字符集 JavaScript程序:Unicode字符集编写 Unicode:ASCII和Latin-1的超集,支持所有在用的语言。 ECMAScript 3要求JavaScript的实现必须支持Unicode 2.1及后续版本 EC...

_Somuns
9分钟前
2
0
数据安全管理:RSA算法,签名验签流程详解

本文源码:GitHub·点这里 || GitEE·点这里 一、RSA算法简介 1、加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用。可以在不直接传递密钥的情况下,完成加解密操...

知了一笑
49分钟前
5
0
Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
今天
6
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部