什么是Mysql存储引擎

发布时间:2021-07-05 18:01:07 作者:chen
来源:亿速云 阅读:136

这篇文章主要介绍“什么是Mysql存储引擎”,在日常操作中,相信很多人在什么是Mysql存储引擎问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Mysql存储引擎”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

InnoDB存储引擎

InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎,它被设计用来处理大量的短期事务,InnoDB的性能和自动崩溃恢复特性,使得它在非事务存储的需求中也很流行。除非有非常特别的原因使用其它的存储引擎,否则应该优先考虑InnoDB引擎。InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。InnoDB基于聚簇索引建立。并且内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区等。

MyISAM存储引擎

MySQL 5.1及之前的版本默认的存储引擎。提供了大量的特性,包括全文索引、压缩、空间函数等,但是不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。对于只读的数据,或者表比较小,可以忍受修复repair操作,则依然可以继续使用MyISAM。主要特性有:加锁与并发整张表加锁而不是针对行(造成性能问题),读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁,但是在表有读取查询的同时,也可以往表中插入新的记录(称为并发插入);修复,可以手动或者自动执行检查和修复操作,但会导致一些数据丢失,而且修复操作是非常慢的。(check table mytable,repair table mytable);支持前缀索引和全文索引,后者基于分词创建,可以支持复杂的查询;延迟更新索引建,指定DELAY_KEY_WRITE选项,在每次修改执行完成后,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。这种方式可以极大提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作;支持压缩表,但压缩后不可修改(除非解除压缩、修改数据然后再次压缩),有利于减少磁盘空间占用,减少磁盘I/O提升查询性能。

其它存储引擎

Memory引擎

所有数据保存在内存中,不需要进行磁盘IO,至少比MyISAM表一个数量级,适合快速访问数据,并且这些数据不会被修改,重启会丢失。适合查找或者映射表,缓存周期性聚合数据或者保存数据分析产生的中间数据等场景。

与临时表不同,临时表指使用create temporary table语句创建的表,它可以使用任何存储引擎,临时表只在单个连接中可见,当连接断开临时表也将不复存在。

Archive引擎

只支持insert和select操作,会缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM的表I/O更少。适合日志和数据采集类应用,是一个针对高速插入和压缩做了优化的简单引擎。

如何选择合适的引擎

大部分情况下,InnoDB都是正确的选择,也是默认的存储引擎。除非需要用到某些InnoDB不具备的特性,并且没有其它办法可以替代,否则都应该优先选择InnoDB引擎。

事务

如果需要事务支持,那么InnoDB是目前最稳点并且经过验证的选择。

备份

如果需要在线热备份,那么选择InnoDB就是最基本的要求,如果可以定期地关闭服务器来执行备份,那么备份的因素则可以忽略。

崩溃恢复

数据量比较大的时候,系统崩溃后如何快速地恢复是一个需要考虑的问题。相对而言,MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度也慢。

特有特性

比如只有MyISAM支持地理空间搜索,InnoDB支持聚簇索引等。

应用举例

日志型应用

这类应用对插入速度有很高的要求,数据库不能成为瓶颈,MyISAM或者Archive存储引擎对这类应用比较合适,因为开销低,而且插入速度非常快。如果需要对记录的日志做分析报表,生成报表的sql可能导致插入效率明显降低,如何解决?一、利用MySQL内置的复制方案将数据复制一份到备库,然后在备库上执行比消耗时间和CPU的查询,主库用于高效的插入工作。二、表分时间段存储,对历史表的频繁查询操作不会干扰到最新当前表上的插入操作。

只读表或者大部分情况下只读的表

读多写少的场景,如果不介意MyISAM的崩溃恢复问题,那么MyISAM是合适的,MyISAM只会将数据写入到内存中,然后等待操作系统定期将数据刷出到磁盘上。

不要轻信“MyISAM比InnoDB快”之类的经验之谈,这个结论不是绝对的,在很多已知的场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是使用到聚簇索引,后者需要访问的数据都可以放入内存的应用。当设计上述类型的应用时,建议采用InnoDB。MyISAM随着应用压力的上升,则可能迅速恶化,各种锁争用、崩溃后的数据丢失等问题都会随之而来。

订单处理

事务支持是必要选项,同时考虑外键支持情况,InnoDB是订单处理类应用的最佳选择。

到此,关于“什么是Mysql存储引擎”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 什么是MySQL索引与事务、存储引擎及实例介绍
  2. 什么是MySQL的索引、事务及存储引擎

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:Python中怎么检验时间序列的平稳性

下一篇:Python 中怎么利用Pandas处理复杂的Excel数据

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》