数据库存储引擎—InnoDB,MyISAM

存储引擎

  • 首先,什么是存储引擎:

Mysql用各种不同的存储技术,将数据存储到文件或内存中。数据库存储引擎是数据库的底层的软件组件,数据库可以使用数据存储引擎进行创建,查询,更新和删除数据的操作。不同的存储引擎会提供不同的存储机制,索引技巧,锁定水平等功能,现在许多的数据库管理系统都支持多种的不同的存储引擎。

  • 首先这里说的是MySQL内的存储引擎,他有许多的存储引擎,但是使用的比较多的还是InnoDB,MyISAM,Memory这三个。

我们可以在mysql的图形化姐界面工具上,通过一个sql命令,来查询目前自己电脑上的Mysql适配的存储引擎有哪些:

show ENGINES;

显示的内容:

我的电脑的版本是8.0.28的

由上面可以看到在当前的版本的Mysq(8.0.28)中他的引擎有:

FEDERATED
BLACKHOLE
XENGINE
MEMORY
InnoDB
PERFORMANCE_SCHEMA
Sequence
MyISAM
MRG_MYISAM
CSV
ARCHIVE

主要使用的三个引擎

InnoDB

InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。
——百度百科

在MySQL5.5.5以后,InnoDB已经作为他默认的存储引擎,而这也依托于他较好的特性:

特性

  • 1,提供了事务,回滚以及系统奔溃修复能力和多版本并发控制的事务的安全。
  • 2,支持自增长列(auto_increment)
  • 3,支持外键(foreign key)
  • 4,支持MVCC的行级锁
  • 5,索引使用的是B+Tree
  • 6,能非常高效的缓存索引和数据
  • 7,支持分区、表空间,类似oracle数据库
  • 8,对硬件资源要求还是比较高的场合
  • 9,对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引。

优点:

  • 提供了良好的事务处理,奔溃修复能力和并发控制,

缺点:

  • 读写效率较差,占用的数据空间相对较大

场景:

  • 在业务中既有读写,而且使用频繁,使用InnoDB
  • 不知道怎么选择时,使用InnoDB。
  • 基本可以满足未来存在的种种复杂的业务

MyISAM

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性与并发违规处理机制,后来就逐渐取代MyISAM。
——百度百科

特点:

  • 1,不支持事务

  • 2,不支持行级锁

  • 3,只支持并发插入的表锁

  • 4,主要用于高负载的 SELECT

  • 5,访问速度快,对事务完整性没有要求

三种存储格式:

(1)静态(固定长度)表
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。

(2)动态表
动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。

(3)压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

优点:

  • 占用空间小,处理速度快

缺点:

  • 不支持事务的完整性和并发性

场景:

  • 实际的业务场景中不需要事务的支持
  • 单方面读取或写入数据比较多的业务
  • 使用读写并发访问相对较低的业务
  • 数据修改相对较少的业务
  • 对数据业务一致性要求不是非常高的业务
  • 服务器硬件资源相对比较差,硬件水平较低

MEMORY

特点:

  • MEMORY存储引擎将表中的数据存储到内存中。

    • (每个基于MEMORY存储引擎的表实际对应⼀个磁盘⽂件,该⽂件的⽂件名和表名是相同的,类型为.frm。该⽂件只存储表的结构,⽽其数据⽂件,都是存储在内存中,这样有利于对数据的快速处理,提⾼整个表的处理能⼒。)
  • MEMORY存储引擎默认使⽤哈希(HASH)索引,其速度⽐B+Tree要快,如果希望使⽤B树型,可在创建表的时候使⽤。
  • 支持HASH索引和BTree索引(默认HASH索引)
  • 所有字段都为固定长度,例如varchar(10)=char(10)
  • 不支持BLOB和TEXT等大字段
  • Memory存储引擎使用表级锁

优点:

  • 数据快速访问和处理。

缺点:

  • ⼀旦发⽣异常,重启或关闭机器,数据都会丢失。

场景:

  • 适合⽤于查询的临时表。

实际应用中关于存储引擎的选用:

如果要求提供提交、回滚和崩溃恢复的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个很好的选择。
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。
如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive存储引擎非常适合存储归档数据,如记录日志信息可以使用Archive引擎。
使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求。使用合适的存储引擎,将会提高整个数据库的性能

本篇的内容只适用于应付简单的面试场景,他的实际操作和应用将在后面的内容中进行填充。

本文内容有不正确或不恰当的,欢迎在评论区留言,指教讨论。

数据库存储引擎—InnoDB,MyISAM,Memory相关推荐

  1. mysql 主库innodb从库myisam_MySQL的两种常用数据库存储引擎:MyISAM与InnoDB

    问题1:MySQL的data里的网站数据库里只有.frm 而没有.MYD和.MYI文件? 解释:首先排除误删的情况,那么,你的此数据库的存储引擎可能为innoDB类型(把数据库导入为.sql后,可以在 ...

  2. mysql 启用myisam_MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法

    存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能 ...

  3. 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?

    InnoDB.MyISAM两种存储引擎的大致区别? 1.InnoDB支持事务,MyISAM不支持, 这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyI ...

  4. 存储引擎——概述|| 各种存储引擎的特性(InnoDB||MyISAM||MEMORY||MERGE) ||存储引擎的选择

    存储引擎概述 和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎. 存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式. 存储引擎是基于表 ...

  5. MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

    文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...

  6. MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎 1.存储引擎其实就是如何实现存储数据 ...

  7. 「MySQL 数据库 存储引擎」InnoDB和MyIsAm的区别

    我们应该深刻意识到Mysql数据库的核心为存储引擎 MySql数据库的插件型体系结构,可以使用不同的存储引擎-- 而每个存储引擎都有各自的特点,开发人员可以根据不同的业务和应用建立不同的存储引擎表. ...

  8. MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种常用的存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名 ...

  9. mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解

    前言 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也 ...

最新文章

  1. 【oracle】dblink创建
  2. mac qt android开发环境搭建,Mac 下 PyQt5 的开发环境搭建
  3. TinyMCE 新增本地图片上传功能
  4. java抽组件_Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
  5. linux远程监控毕业设计,毕业设计论文:基于嵌入式Linux远程监控系统的设计与实现.doc...
  6. 批处理 如果提示错误暂停_dos批处理脚本代码,一键删除目录文件夹例子,dos命令bat教程...
  7. RAC Debug开关修改工具
  8. CMU 15-213 Introduction to Computer Systems学习笔记(18) Dynamic Memory Allocation: Basic Concepts
  9. Quartus-ll 采用三种方法实现 D 触发器功能仿真及时序波形仿真详细步骤
  10. 题解 - HDU 6638 Snowy Smile (线段树)
  11. 将vscode打造成无敌的IDE(1)初步探索vscode,解放生产力
  12. 保存Unity中的Log日志
  13. 操作系统Topic推荐-AMiner
  14. 在计算机中存储器是由内存和外存的区别,简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点?...
  15. VMware设置虚拟机连接内外网
  16. 带参宏和带参函数的比较(C语言)
  17. Redis的key为什么中间要用冒号隔开
  18. f2fs学习笔记 - 7. f2fs文件打开
  19. ps磨皮插件portraiture
  20. Java 习题8 参考答案及解析

热门文章

  1. 1082. 射击比赛 (20)
  2. map+area标签
  3. 52句《职来职往》经典语句,震惊大学生!
  4. 基于FPGA的小飞机游戏
  5. Rss订阅推送到Kindle的几种方法
  6. Google优化工具Timeline的使用(Chrome 57已经改为performance(性能模板))
  7. 短视频的内容付费模式
  8. 豆瓣读书搜索页的window.__DATA__的解密
  9. 微信测试账号(验证成为开发者)总是配置失败
  10. 【2020年第七次人口普查】省市县有老年人的户数、户口登记地在外的人口情况