数据库存储引擎—InnoDB,MyISAM
存储引擎
首先,什么是存储引擎:首先这里说的是MySQL内的存储引擎,他有许多的存储引擎,但是使用的比较多的还是InnoDB,MyISAM,Memory这三个。Mysql用各种不同的存储技术,将数据存储到文件或内存中。数据库存储引擎是数据库的底层的软件组件,数据库可以使用数据存储引擎进行创建,查询,更新和删除数据的操作。不同的存储引擎会提供不同的存储机制,索引技巧,锁定水平等功能,现在许多的数据库管理系统都支持多种的不同的存储引擎。
我们可以在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公司所开发,五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。
——百度百科
在MySQL5.5.5以后,InnoDB已经作为他默认的存储引擎,而这也依托于他较好的特性:
特性
1,提供了事务,回滚以及系统奔溃修复能力和多版本并发控制的事务的安全。2,支持自增长列(auto_increment)3,支持外键(foreign key)4,支持MVCC的行级锁5,索引使用的是B+Tree6,能非常高效的缓存索引和数据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》对你有帮助,请点赞、收藏,并留下你的观点哦!