当前位置: 首页 > news >正文

mysql 存储引擎 对比_MySQL存储引擎(附带各种存储引擎的对比)

什么是存储引擎

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。

提示:InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。

MyISAM 是基于 ISAM 的存储引擎,并对其进行扩展,是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。

MEMORY 存储引擎将表中的数据存储到内存中,为查询和引用其他数据提供快速访问。

MySQL 5.7 支持的存储引擎

MySQL 支持多种类型的数据库引擎,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供各自不同的适应性和灵活性。在 MySQL 中,可以利用 SHOW ENGINES 语句来显示可用的数据库引擎和默认引擎。

MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。可以使用SHOW ENGINES语句查看系统所支持的引擎类型,结果如图所示。

dbd37446255329da23536f64f6182486.gif

Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。

如何选择 MySQL 存储引擎

不同的存储引擎都有各自的特点,以适应不同的需求,如表所示。为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。

功能MylSAMMEMORYInnoDBArchive

存储限制

256TB

RAM

64TB

None

支持事务

No

No

Yes

No

支持全文索引

Yes

No

No

No

支持树索引

Yes

Yes

Yes

No

支持哈希索引

No

Yes

No

No

支持数据缓存

No

N/A

Yes

No

支持外键

No

No

Yes

No

可以根据以下的原则来选择 MySQL 存储引擎:

如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。

如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。

如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。

如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。

提示:使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎将会提高整个数据库的性能。

MySQL 默认存储引擎

InnoDB 是系统的默认引擎,支持可靠的事务处理。

使用下面的语句可以修改数据库临时的默认存储引擎

SET default_storage_engine=< 存储引擎名 >

例如,将 MySQL 数据库的临时默认存储引擎修改为 MyISAM,输入的 SQL 语句和运行结果如图所示。

a94b07f52e3962608ebb82577ffafbe7.gif

此时,可以发现 MySQL 的默认存储引擎已经变成了 MyISAM。但是当再次重启客户端时,默认存储引擎仍然是 InnoDB。

相关文章:

  • GCC精彩之旅 [zz]
  • mysql 57授权失败_完美解决mysql客户端授权后连接失败的问题
  • python显示括号错误_【求救】python中处理错误值时总是提示missing),但实际括号都是英文,也没有缺失括号,求救!!!...
  • QQ 1234days
  • new操作符的使用问题[ask in smth]
  • python王者战斗_用 Python 自动玩王者荣耀,简直不要太秀!
  • 大家在申请内存时都是如何做的?[ask in smth]
  • 单例模式获取mysql连接_获取JDBC Connection单例模式
  • centos7安装源mysql5.6_centos7.4 mysql5.6 源码安装
  • 系统安装时文件系统的选择
  • python super 多重继承_Python的super()如何处理多重继承?
  • debian系统安装
  • qt修改程序图标名称_Qt for Android修改应用程序的图标和名称
  • 一些有用的打电话,写email,写信一些有用的知识
  • vscode自动快捷格式化代码_vsCode 代码格式化(Ctrl+S自动格式化代码+保存)
  • [译] React v16.8: 含有Hooks的版本
  • ➹使用webpack配置多页面应用(MPA)
  • Codepen 每日精选(2018-3-25)
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Idea+maven+scala构建包并在spark on yarn 运行
  • input的行数自动增减
  • Javascript 原型链
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java应用性能调优
  • laravel5.5 视图共享数据
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 蓝海存储开关机注意事项总结
  • 我这样减少了26.5M Java内存!
  • 项目实战-Api的解决方案
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • scrapy中间件源码分析及常用中间件大全
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (二)springcloud实战之config配置中心
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (九十四)函数和二维数组
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (算法)前K大的和
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 未来三学期想要修的课 (日記)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .describe() python_Python-Win32com-Excel
  • .gitignore文件—git忽略文件
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • @Bean注解详解
  • @ComponentScan比较
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Service注解让spring找到你的Service bean
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [16/N]论得趣
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票