数据库存储引擎—InnoDB,MyISAM,Memory

数据库存储引擎—InnoDB,MyISAM

存储引擎

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

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

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

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

show ENGINES;

显示的内容:
数据库存储引擎—InnoDB,MyISAM,Memory_第1张图片
我的电脑的版本是8.0.28的
数据库存储引擎—InnoDB,MyISAM,Memory_第2张图片
由上面可以看到在当前的版本的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引擎。
使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求。使用合适的存储引擎,将会提高整个数据库的性能

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

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

你可能感兴趣的:(数据库,数据库,mysql,db)