数据库存储引擎—InnoDB,MyISAM,Memory
数据库存储引擎—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相关推荐
- mysql 主库innodb从库myisam_MySQL的两种常用数据库存储引擎:MyISAM与InnoDB
问题1:MySQL的data里的网站数据库里只有.frm 而没有.MYD和.MYI文件? 解释:首先排除误删的情况,那么,你的此数据库的存储引擎可能为innoDB类型(把数据库导入为.sql后,可以在 ...
- mysql 启用myisam_MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法
存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能 ...
- 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?
InnoDB.MyISAM两种存储引擎的大致区别? 1.InnoDB支持事务,MyISAM不支持, 这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyI ...
- 存储引擎——概述|| 各种存储引擎的特性(InnoDB||MyISAM||MEMORY||MERGE) ||存储引擎的选择
存储引擎概述 和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎. 存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式. 存储引擎是基于表 ...
- MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别
文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...
- MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎 1.存储引擎其实就是如何实现存储数据 ...
- 「MySQL 数据库 存储引擎」InnoDB和MyIsAm的区别
我们应该深刻意识到Mysql数据库的核心为存储引擎 MySql数据库的插件型体系结构,可以使用不同的存储引擎-- 而每个存储引擎都有各自的特点,开发人员可以根据不同的业务和应用建立不同的存储引擎表. ...
- MySQL存储引擎之Myisam和Innodb总结性梳理
Mysql有两种常用的存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名 ...
- mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解
前言 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也 ...
最新文章
- 【oracle】dblink创建
- mac qt android开发环境搭建,Mac 下 PyQt5 的开发环境搭建
- TinyMCE 新增本地图片上传功能
- java抽组件_Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor
- linux远程监控毕业设计,毕业设计论文:基于嵌入式Linux远程监控系统的设计与实现.doc...
- 批处理 如果提示错误暂停_dos批处理脚本代码,一键删除目录文件夹例子,dos命令bat教程...
- RAC Debug开关修改工具
- CMU 15-213 Introduction to Computer Systems学习笔记(18) Dynamic Memory Allocation: Basic Concepts
- Quartus-ll 采用三种方法实现 D 触发器功能仿真及时序波形仿真详细步骤
- 题解 - HDU 6638 Snowy Smile (线段树)
- 将vscode打造成无敌的IDE(1)初步探索vscode,解放生产力
- 保存Unity中的Log日志
- 操作系统Topic推荐-AMiner
- 在计算机中存储器是由内存和外存的区别,简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点?...
- VMware设置虚拟机连接内外网
- 带参宏和带参函数的比较(C语言)
- Redis的key为什么中间要用冒号隔开
- f2fs学习笔记 - 7. f2fs文件打开
- ps磨皮插件portraiture
- Java 习题8 参考答案及解析