MySQL 选择合适的存储引擎
作者:debug客栈 发布时间:2024-01-21 08:55:24
对于数据库这一块询问比较多的就是在 MySQL 中怎么去选择一种何时当前业务需求的存储引擎,而 MySQL 中支持的存储引擎又有很多种,那么 MySQL 中分别又有那些,怎么优雅的使用呢?
划分引擎原因
在文件系统中,MySQL 将每个数据库(也可以称之为 schema )保存为数据目录下的一个子目录。创建表时,MySQL 会在数据库子目录下创建一个和表同名的 .frm 文件保存表的定义。例如创建一个名为 DebugTable 的表,MySQL 会在 DebugTable.frm 文件中保存该表的定义。
因为 MySQL 使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体的平台密切相关。在 Windows 系统中,大小写是不敏感的;而在类 Unix 系统中则是敏感的。不同的存储引擎保存数据和索引的方式是不同的,但表的定义则是在 MySQL 服务层wk统一处理的。
查看支持引擎
想了解 MySQL 中支持的引擎的情况,可以使用如下命令查看:
show engines;
结果如下(MySQL版本:Ver 8.0.19):
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
存储引擎分类
MySQL 存储引擎分类有 MyISAM、InnoDB、Memory、Merge等,可以看上面表中列出的支持引擎,但是其中最为常用的就是 MyISAM 和 InnoDB 两个引擎,其中针对于以上讲到的存储引擎,如下表进行对比:
MyISAM 与 InnoDB 区别
两种类型最主要的差别是InnoDB支持事务处理与外键和行级锁。
InnoDB 可借由事务日志( Transaction Log )来恢复程序崩溃( crash ),或非预期结束所造成的数据错误;而 MyISAM 遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。
InnoDB 的修复时间,一般都是固定的,但 MyISAM 的修复时间,则与数据量的多寡成正比。
相对而言,随着数据量的增加,InnoDB 会有较佳的稳定性。
MyISAM 必须依靠操作系统来管理读取与写入的缓存,而 InnoDB 则是有自己的读写缓存管理机制。( InnoDB 不会将被修改的數據頁立即交给操作系统)因此在某些情况下,InnoDB 的数据访问会比 MyISAM 更有效率。
InnoDB 目前并不支持 MyISAM 所提供的压缩与 terse row formats(简洁的行格式) ,所以对硬盘与高速缓存的使用量较大。
当操作完全兼容 ACID(事务)时,虽然 InnoDB 会自动合并数笔连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒 200 次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然 InnoDB 也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。
应用场景
MyISAM 管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的 SELECT 查询,那么 MyISAM 是更好的选择。
InnoDB 用于事务处理应用程序,具有众多特性,包括 ACID 事务支持。如果应用中需要执行大量的 INSERT 或 UPDATE 操作,则应该使用 InnoDB,这样可以提高多用户并发操作的性能。
来源:https://www.debuginn.cn/5753.html
猜你喜欢
- 最近在做新闻发布系统的时候,用到了二级联动,我把使用方法记录下来,以便日后查阅以及帮助新手朋友们。下面是效果图:下面来讲解一下实现的方法:1
- 1 索引索引概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的
- 手头有 109 张头部 CT 的断层扫描图片,我打算用这些图片尝试头部的三维重建。基础工作之一,就是要把这些图片数据读出来,组织成一个三维的
- Profile 和 cProfile在 Python 标准库里面有两个模块可以用来做性能测试。1. 一个是 Profile,它是一个纯 Py
- django rest framework使用django-filter注意事项:一定要在setting文件里面加载如下代码,而不是只安装包
- datetime64与unix时间戳互转在用pandas处理数据时,经常要处理一些时间类型数据,经常把pandas时间类型与datetime
- Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板。模板引擎是一个库,旨在将模板与数据结合起来以生成
- 解决Python3 控制台输出InsecureRequestWarning的问题问题:使用Python3 requests发送HTTPS请求
- W3C发布了WCAG 2.0提案(Web Content Accessibility Guidelines 网页内容无障碍指南),大概为了实
- 创建watermark.js文件let watermark = {}let setWatermark = (str) => { let
- 一.问题描述在二维数组的遍历中,我们经常使用双层for循环。在某些时候,我们并不需要遍历整个二维数组。当条件满足时就应该终止for循环。但是
- 目录1. 测试环境1.1 软硬件1.2 表结构2. 测试目的2.1 压缩空间对比2.2 查询性能对比3. 测试工具3.1 mysqlslap
- 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现。导入包导入随机包,pygame,系统包,time时
- 在进行数据分析的时候,会把把一些具有多个特征的样本数据进行拼接合并吗,放在一起分析,预测....下面是用numpy中的函数进行数组的拼接。(
- 首先声明,这里的权值共享指的不是CNN原理中的共享权值,而是如何在构建类似于Siamese Network这样的多分支网络,且分支结构相同时
- 最近有个小项目,需要爬取页面上相应的资源数据后,保存到本地,然后将原始的HTML源文件保存下来,对HTML页面的内容进行修改将某些标签整个给
- 前言众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错。如以下的代码:
- 解析html是爬虫后的重要的一个处理数据的环节。一下记录解析html的几种方式。先介绍基础的辅助函数,主要用于获取html并输入解析后的结束
- 回想下,在 Python 中编程时,你是否曾经需要检查某个可迭代对象(如列表)中的任何元素或所有元素的计算结果是否为True?假设,我们要判
- 导语在大多数开发需求中,我们有时需要将某个数据,或者某个函数方法,挂载到,全局实例身上,以便于,在项目全局的任何位置都能够调用其方法,或读取