mysql引擎 innodb memory myisam 区别

不同:

1、innodb表的数据总是有序存放的,而内存表的数据就是按照写入顺序存放的;

2、当数据文件有空洞的时候,innodb表在插入新数据的时候,为了保证数据有序性,只能在固定的位置写入新值,而内存表是找到空位就可以插入新值;

3、数据位置发生变化的时候,innodb表只需要修改主键索引,而内存表需要修改所有索引

4、innodb表用主键索引查询时需要走一次索引查找,用哪个普通索引查询的时候,需要走两次索引查找,而内存表没有这个区别,所有的索引的地位都是相同的

5、innodb支持变长数据类型,不同记录的长度可能不同,内存表不支持blob和text字段,并且即使定义了varchar(n),实际也当作char(n),也就是固定长度字符串来存储,因此内存表的每行数据长度相同

由于内存表的这些特性,每个数据行被删除以后,空出的额这个位置都可以被接下来要插入的数据复用

内存表的锁:

内存表不支持行锁,只支持表锁,因此,一张表只要有更新,就会堵住其他所有在这个表上的读写操作

跟行锁比起来,表锁对并发访问的支持不够好,所以,内存表的锁粒度问题,决定了它在处理并发事务的时候,性能都会太好

MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎。MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。

MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。其实,frm文件存储表的结构;MYD文件存储数据,是MYData的缩写;MYI文件存储索引,是MYIndex的缩写。

基于MyISAM存储引擎的表支持3种不同的存储格式。包括静态型、动态型和压缩型。其中,静态型是MyISAM的默认存储格式,它的字段是固定长度的;动态型包含变长字段,记录的长度不是固定的;压缩型需要用到myisampack工具,占用的磁盘空间较小。

MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

简单总结:

innodb:支持事务处理,支持外健,支持崩溃修复能力和并发控制,如果需要对事务的完整性要求比较高,要求实现并发控制,那么选择innodb有很大的优势,如果需要频繁的更新、删除操作的数据库,也可以选择innodb,因为支持事务的提交和回滚

myisam:插入数据快、空间和内存使用比较低,如果表主要是用于插入新记录和读出记录,那么选择myisam能实现处理高效率,如果应用的完整性、并发性要求比较低,也可以使用

memory:所有的数据都在内存中,数据的处理速度快,但是安全性不高,如果需要很快的读写速度,对数据的安全性要求较低,都可以选择memeoey。它对表的大小有要求,不能建立太大的表,所以,这类数据库只使用在相对较小的数据库表。

同一个数据库也可以使用多种存储引擎的表,如果一个表要求比较高的事务处理,可以选择innodb,这个数据库中可以讲查询要求比较高的表选择myisam存储,如果该数据库需要一个用于查询的临时表,可以选择memory存储引擎

原文地址:https://www.cnblogs.com/weiluoyan/p/10681655.html

时间: 2024-08-02 22:16:55

mysql引擎 innodb memory myisam 区别的相关文章

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、MERGE、ARCHIVE)介绍与如何选择

mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 https://blog.csdn.net/CSDN___LYY/article/details/80844606 一:前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的

MySQL存储引擎InnoDB与Myisam

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

InnoDB和MyISAM区别总结

InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是InnoDB类型,也就没有在意.最近做项目时发现表里除了有InnoDB类型外还有MyISAM类型,上官网看了看之后做以下总结: 原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供

InnoDB 与 MyISAM 区别

一.索引 1. InnoDB的数据文件本身就是索引文件.MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址.而在InnoDB中,表数据文件本身 就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录.这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是 主索引. 2. InnoDB的辅助索引data域存储相应记录主键的值而不是地址 二.其他 1.myisam可以对索引进行压缩,innodb不压缩2.索引都用b-tree, innodb使

MySQL的InnoDB和MyISAM比较

InnoDB 1)虽然不支持用户创建聚族索引,但InnoDB会对主键建立聚簇索引.如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替.如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引.一般来说,DBMS都会以聚簇索引的形式来存储实际的数据,它是其它二级索引的基础.在InnoDB中采用自增主键能获得更好的效率. 2)使用行级锁 3)支持并发 4)支持事务 5)比MyISAM有更好的安全性 MyISAM 1)不支持用户创建聚族索引,自身也不会使用聚族索引存

MySQL之存储引擎InnoDB和MyISAM的区别及底层详解(转)

题外话:中华文化博大进深,从学Java到数据库,无一不体现出同一组件鱼和熊掌不可兼得的要义.自然,编程中安全和效率也很难同时做到完美,这一次InnoDB和MyISAM又让我大开眼界. 好了,Talk is cheap,show you the code: 测试环境:Mysql 5.7.20-log,IDEA 2018 首先创建两张表: testinnodb,testmyisam,sql如下: 1.同时大批量插入数据(百万级,million),小编采用了存储过程,代码及测试结果如下: 下面代码在I

MySQL存储引擎 InnoDB与MyISAM的区别

来源:http://www.jb51.net/article/47597.htm 基本的差别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能.以下是一些细节和具体实现的差别:1.InnoDB不支持FULLTEXT类型的索引.2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,Inn

mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择

http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html 酷壳 - MySQL: InnoDB 还是 MyISAM? 51cto - InnoDB还是MyISAM 再谈MySQL存储引擎的选择 MyISAM VS InnoDB —— MySQL存储引擎的选择