innodb和myisam的差异化

这个问题想必大家都被问过无数次。今天来总结一下。

1.myisam:

文件结构:frm,myi,myd

frm是文件信息,myi是索引文件,myd是数据文件。(5.6之前只有myisam支持全文检索。Innodb不支持全文检索,5.6以后开始支持。)

myisam引擎支持的表锁,这样就造成myisam对并发的支持非常差。如果对一张表的数据进行修改,整张表都会被锁定,其他进程只能等待该进程释放后才能对该表进行读和写。

select和Insert较innodb来说快。

引用两篇性能测试文章

2012年

http://www.4wei.cn/archives/1001855

2014年

http://xmgu2008.blog.163.com/blog/static/139122380201402492349491/

从第一篇文章中可以看到,innodb因为受 innodb_flush_log_at_trx_commit 这个选项的影响,所以自动提交和手动提交性能相去甚远。

取select count(*)极快,因为myisam表都会有一个叫表状态的内存空间。这个表的总记录数,以及修改时间和表的长度等等关键数据都是存在一个单独的内存块里面的,当你发起select count(*)这样的请求,Myisam引擎就不会真的去扫描标表行数了。直接从内存中把该变量读出来。但是如果你加了一个where条件,而且这个条件的字段不是索引的话,他依然会去扫描表的每一行。

2.Indodb

2.1事物支持

Indodb最重要的一条特性就是支持事务。如果你的业务模型需要原子性的sql操作,需要保证高并发下的数据一致性,就要用到事物。

2.2行级锁定

对并发的支持较好,只锁定表中需要修改的那一行,update的速度比myisam引擎速度要快。但是比教消耗资源

3.索引与数据存储结构对比

3.1.myisam:

primary(主键索引)与secondary(二级索引)结构相同,每条索引记录保存后面的指针(myisam的记录是一行行的,如果你的记录有10万行,那么myd这个文件就有10万行,每一行在哪个位置就是记录的指针)

数据都是顺序插入的。

每次Insert都是在数据最后一行插入。那么问题来了,如果我们普通Insert是没有问题,如果去修改一个变长字段,比如已经有了一百行,需要去修改第一行,第一行原来有一个名称是姓名,这个字段是变长的,原来是varchar这种类型,原先只写了10个字节,myisam就用10个字节的空间去存储,现在要把它写成20个字节,把一个行变成一个二进制流来讲,前几十个字节代表第一行,你想把第一行变成更多的字节,那它原来的空间就不能存储了那这个时候,myisam引擎就会再后面追加一个新行,可能其他字段不变,只把你新的二十个字节的姓名写到这个表的最后面,那这个时候,记录这条记录指针的位置已经变了,那这个时候就需要去修改跟这条记录相关的所有索引后面的记录。来保证索引还能指向正确的位置。所以说,你频繁去更新Myisam表变长字段的话,那实际上是很慢的。

Innodb

innodb用的是聚簇索引。聚簇索引的主键用的是自增的id为准,mysiam的主键可以用一个甚至多个字段或者一个字符串当做主键,innodb则是不可以的,innodb只能用自增的数字作为主键,按主键的顺序去存放索引和数据。Innodb

使用b+树去排列,左边比右边的小,通常他的主键和数据是存放在一起的,使用连续的一段空间。你去写一个新的数据的时候,比如写到5,他可能在某个节点的左边子节点,写6的时候,变成右边的子节点,按这样的顺序去写,和myisam不同,根据某一行去追加。innodb的secondary(二级索引)保存的是主键id,因此数据变动时不需要修改索引。

时间: 2024-10-27 05:34:39

innodb和myisam的差异化的相关文章

MySQL存储引擎差异化实验

本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口和存储的物理文件之间的桥梁.每一种storage engine 架构组件都是根据特定的场合来设计的,负责数据的 I/O 操作,并启用一些特性的支持. MySQL存储引擎被设计为插件式结构,每种存储引擎可从运行的mysql里动态加载或卸载.我们可以在客户端连接后用show plugins;查看当前加载

MySQL存储引擎【InnoDB、MyISAM、Memory】

数据库,MySQL这样存在多存储引擎的数据库软件,清楚常见的存储引擎的区别,使用合适的存储引擎,使得项目跑的更顺畅,有时候对于一个项目,甚至比项目本身都重要.这篇文章,旨在浅谈常见的三种存储引擎的区别,优缺点.是学习也是分享. 1:查看MySQL所支持的存储引擎: 1.1 show engines; 1.2 show variables like 'have%'; 这样,我们清楚了MySQL所支持的存储引擎都有哪些. 下面,分析一下几个常见的存储引擎.InnoDB,MYISAM和Memory.

mysql数据库InnoDB和MyISAM区别以及如何选择

mysql数据库InnoDB和MyISAM区别以及如何选择: 区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务: 2. InnoDB支持外键,而MyISAM不支持.对一个包含外键的InnoDB表转为MYISAM会失败: 3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高.但是辅助索引需要两次查询,先查询

MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

先去查一下"引擎"概念. 引擎(Engine)是电子平台上开发程序或系统的核心组件.利用引擎,开发者可迅速建立.铺设程序所需的功能,或利用其辅助程序的运转.一般而言,引擎是一个程序或一套系统的支持部分.常见的程序引擎有游戏引擎,搜索引擎,杀毒引擎等. Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储

在“春晚”夹击中实现差异化突围 一直播春节系列活动吸睛

自1983年举办至今,央视春节联欢晚会已经成为了中国规模最大.最受关注.收视率最高.影响力最大的综艺晚会.就在2017鸡年央视春晚上,截止当晚22时30分网络收看人数达1.04亿,手机和移动端占比超七成.鸡年春晚除了延续品牌神话外,也给在移动端上和春晚同台竞技的直播平台们带来了巨大的挑战. 截止除夕夜12时,一直播独家策划的"直播过大年"春节直播活动累计观看次数突破6600万,最高同时在线峰值突破450万:同时,持续数十天的一直播"星拜年"活动,已有超过150位明星

InnoDB与Myisam比较

InnoDB与Myisam比较                                                                                                            MyISAM   InnoDB   构成上的区别:   每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名是.MYI (

InnoDB还是MyISAM 再谈MySQL存储引擎的选择

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选. 原因如下: 1.首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的. 2.MyISAM的索引和数据是分开的,

mysql中innodb和myisam的区别

InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了 1.事务和外键InnoDB具有事务,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID.如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能MyISAM管理非事务表.它提供高速存储和检索,以及全文搜索能力.如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择2.FULLTEXTInnodb不支持全文索

MySQL: InnoDB 还是 MyISAM? (转载)

MyISAM存储引擎 原文作者:http://www.cnblogs.com/villion/archive/2009/07/09/1893762.html MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征: ·      所有数据值先存储低字节.这使得数据机和操作系统分离.二进制轻便性的唯一要求是机器使用补码(如最近20年的机器有的一样)和IEEE浮点格式(在主流 机器中也完全是主导的).唯一不支持二进制兼容性的机器是嵌入式系统.这些系