Mysql常用的三种数据库引擎比较

2023-11-16

       (点击上方蓝字,快速关注)

ISAMISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。


MyISAM
MyISAMMySQLISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。


InnoDB
InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL+API在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAMMyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。

MEMORY: MEMORYMySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。这些特性与前面的两个很不同。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表MEMORY默认使用哈希索引。速度比使用B型树索引快。当然如果你想用B型树索引,可以在创建索引时指定。注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。


在实际工作中,选择一个合适的存储引擎是一个比较复杂的问题。每种存储引擎都有自己的优缺点,不能笼统地说谁比谁好。

 

InnoDB支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 

MyISAM插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

MEMORY所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql常用的三种数据库引擎比较 的相关文章

  • 《机器学习实战》第六章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • STM32 bool

    STM32中基于库V3 5的头文件中 去掉了对bool类型变量的定义 而将它放在了文件stdbool h中 d Keil v5 ARM ARMCC include stdbool h stdbool文件内容如下 stdbool h ISO
  • C++将字符串中包含指定字符串范围内的字符串全部替换

    概述 将指定字符串所在的范围之内的字符串全部替换为指定的字符串 如 源字符串 START dfh待到花开月圆时 两首相顾心相连 END dhussd2434xhuhu是别人十大海归 转换后的字符串 dfh待到花开月圆时 两首相顾心相连 dh
  • XXE漏洞

    何为XXE 简单来说 XXE就是XML外部实体注入 当允许引用外部实体时 通过构造恶意内容 就可能导致任意文件读取 系统命令执行 内网端口探测 攻击内网网站等危害 典型攻击手法 XML又是什么呢 XML用于标记电子文件使其具有结构性的标记语
  • 自动填充固定行数的 GridView

    效果图 代码 C lt script runat server gt 计算数据 这里可以适当修改从数据库中获取
  • Android学习一课一得

    Android学习一课一得 文章目录 引言 1 学习入门 1 1Android开发入门 1 2用户界面设计与布局 1 3数据存储与持久化 1 4网络通信与数据获取 1 5结语 2 学习成果 2 1学习经验与方法 2 2在Android应用中
  • Gym 102152(CDZSC——2020寒假大一愉悦个人赛)

    Gym 102152 A B C D E F G H I J K L http codeforces com gym 102152 A B Memory Management System It is your first day in y
  • c++实现文件版本类b+树

    一 插入 无根节点 当没有根结点时 操作相当简单 只是从存储空间中申请一个新结点 然后设置该结点的prev next is inner 然后将要插入的数据插入该结点 void insert const t var key t val v 没
  • "1,2;3,4,5;6,7,8,9" 转换成[1,2][3,4,5][6,7,8,9]

    1 2 3 4 5 6 7 8 9 转换成 1 2 3 4 5 6 7 8 9 public class Test public static void main String args String s 1 2 3 4 5 6 7 8 9
  • hduoj 2002

    计算球体积 Problem Description 根据输入的半径值 计算球的体积 Input 输入数据有多组 每组占一行 每行包括一个实数 表示球的半径 Output 输出对应的球的体积 对于每组输入数据 输出一行 计算结果保留三位小数
  • Unity报错之【NullReferenceException: Object reference not set to an instance of an object】

    空指针错误 Object并没有作为一个对象的实例 一般都是引用类型的变量没有实例化便使用变量进行一些实例对象才能进行的操作 例如list没有new实例 便对其进行添加元素 private List
  • Python中对文件的常规操作

    文章目录 一 读取文本文件数据 1 1 读文件 r 标识符 1 2 写文件 w操作 1 3 写文件 write only a操作 1 4 r 操作 1 5 w 操作 1 6 a 操作 二 读取非纯文本数据 三 指针的变化 四 上下文管理器
  • web漏洞类型概述(owasp top10笔记)

    一 owasp top10是什么 OWASP 开放式Web应用程序安全项目 OWASP Open Web Application Security Project 是一个非营利组织 不附属于任何企业或财团 它提供有关计算机和互联网应用程序的
  • 基于opencv -python--银行卡识别

    import cv2 def sort contours cnts method left to right reverse False i 0 if method right to left or method bottom to top
  • R 修改安装包默认存放位置的方法

    目录 R语言修改安装包的默认储存位置 查看默认的安装包位置 第一种方法会修改当前用户的R包位置 第二种方法 永久改变 永久有效 第三种方法 修改环境变量 总结 R语言修改安装包的默认储存位置 查看默认的安装包位置 一般会有两个目录 如下 第
  • 计算机操作系统-进程篇

    一 进程 进程 progress 是指计算机中已运行的程序 每个进程都有自己的地址空间 内存 寄存器和堆栈等资源 它们与其他进程相互隔离 互不干扰 进程是操作系统中最基本的资源分配单位 也是操作系统中最重要的概念之一 在操作系统中 进程是由
  • 动态规划:样例讲解一篇通

    概念讲解 动态规划是把大问题分解成子问题 但不能简单的分解 子问题要具有相同子结构的解 并综合子问题的解 导出大问题的解 问题求解耗时会按问题规模呈幂级数增加 基本方法 为了节约重复求相同子问题的时间 引入一个数组 不管它们是否对最终解有用
  • 运行jar包提示 “XXX中没有主清单属性” “找不到主类”两种解决办法

    运行jar包提示 XXX中没有主清单属性 找不到主类 两种解决办法 这种情况一般都是使用maven打成jar包后运行出现的 这种情况是因为jar包里面没有主类路径 解决办法有两个 1 使用IDEA自带的构建jar包流程 不使用Maven打包
  • GPS开源项目

    GPS数据解析开源项目 测试数据 GNRMC 013300 00 A 2240 84105 N 11402 70763 E 0 007 220319 D 69 r n GNVTG T M 0 007 N 0 014 K D 3A r n G
  • C++多态虚函数表详解(多重继承、多继承情况)

    本文关键词 C 多态 多继承 多重继承 虚函数表 虚函数指针 动态绑定 概述 C 相对其他面向对象语言来说 之所以灵活 高效 很大程度的占比在于其多态技术和模板技术 C 虚函数表是支撑C 多态的重要技术 它是C 动态绑定技术的核心 本文章将

随机推荐

  • mavonEditor中的图片上传与删除(前后端交互)

    我设置的存储图片服务器的地址 D Program Files apache tomcat 9 0 43 webapps ROOT newsimg 1 图片上传 1 1 前端 文本上传图片事件处理函数 imgAdd pos file var
  • 一文带你层层解锁「文件下载」的奥秘

    大家好我是秋风 今天带来的主题是关于文件下载 在我之前曾经发过一篇文件上传的文章 一文了解文件上传全过程 1 8w字深度解析 进阶必备 200 点赞 反响还不错 时隔多日 由于最近有研究一些媒体相关的工作 因此打算对下载做一个整理 因此他的
  • Java 将前端传来的数字转化为日期

    由于不知名的原因 前端传来的日期数据被转换成了一串数字 导致入库失败 现需将数字转换为日期格式 代码如下 public class DateTest public static void main String args throws Pa
  • Linux touch 命令指南大全

    1 概述 在本教程中 我们将学习touch命令 简而言之 这个命令允许我们更新文件或目录的最后修改时间和最后访问时间 因此 我们将重点关注如何使用该命令及其各种选项 请注意 我们使用 Bash 测试了此处显示的所有命令 但是 它们应该与任何
  • 手把手教你二进制安装生产环境 K8s 多 master 节点高可用集群详细图文教程

    目录 一 集群环境准备 1 1 kubeadm 和二进制安装 k8s 适用场景分析 1 2 多 master 节点高可用架构图 二 基础环境配置 以下操作所有节点都得执 2 1 初步的环境初始化 2 2 关闭交换分区 swap 提升性能 2
  • Error:Abnormal build process termination: E:\myeclipse\jdk8\jdk\bin\java -Xmx700m -Djava.awt.headle

    解决办法 关闭电脑上面的防火墙就好了
  • Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了

    今年呆在家中实在无聊 外面太危险了 还是在家学习比较安全可持续 过年期间 我又复习了几遍依赖注入框架Dagger 诶 什么是依赖注入 说白了就是降低跟类对象之间的耦合 当需要修改类对象的时候 能不修改被依赖的实例 其实我们平常就用到了很多的
  • Flask的使用

    1 创建项目 利用python的包安装工具pip下载wheel pip3 install flask 查看当前项目的环境 pip3 list 1 2 项目构造 static templates app py mtv model templa
  • 网络中,ping命令还能这样玩

    在网络中 ping 是一个十分强大的 TCP IP 工具 它的作用主要为 1 用来检测网络的连通情况和分析网络速度 2 根据域名得到服务器 IP 3 根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量 一般情
  • Linux:PXE批量网络装机及kickstart无人值守安装

    目录 一 pxe简介 二 pxe使用的服务 三 实施过程 四 pxe优点 五 搭建PXE远程安装服务器 六 kickstart无人值守安装 一 pxe简介 PXE 预启动执行环境 是由Inter公司开发的网络引导技术 工作在Client S
  • 集成底座POC方案说明

    企业的信息化建设是伴随企业发展不断延伸 不断升级的过程 而随着信息化体量的不断增大 复杂繁多的业务系统往往又成为信息化建设的瓶颈 而为了消除瓶颈 更便捷的打通系统的关联 针对企业实际业务建立集成底座平台则是非常有效的一种方式 通过集成底座打
  • 【软件开发】MyBatis 理论篇

    MyBatis 理论篇 1 MyBatis 是什么 MyBatis 是一个半 ORM 对象关系映射 框架 它内部封装了 JDBC 开发时只需要关注 SQL 语句本身 不需要花费精力去处理加载驱动 创建连接 创建 statement 等繁杂的
  • 小程序通过子页面选择数据返回父页面更新数据

    问题 这是父页面 首先选择 地址栏默认地址 北京 按钮 进入子页面 这是子页面 这时候点击 其他城市 名称 将 城市 id 和 名称 更新到 父页面 解决方法 var pages getCurrentPages var currPage p
  • Linux小技巧2--git与GitHub学习笔记

    Linux小技巧2 git与GitHub学习笔记 近日学习了git与GitHub 内容是麦子学院老师关于git与GitHub的教程 话不多说先贴在此处以便于自己查看 也便于需要的人学习 后续将逐渐补充一些git常见错误处理相关的知识 1 g
  • 程序员35岁的破局之道

    微信公众号访问地址 程序员35岁的破局之道 近期热推文章 1 springBoot对接kafka 批量 并发 异步获取消息 并动态 批量插入库表 2 SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据
  • 详解java类的生命周期

    引言 最近有位细心的朋友在阅读笔者的文章时 对java类的生命周期问题有一些疑惑 笔者打开百度搜了一下相关的问题 看到网上的资料很少有把这个问题讲明白的 主要是因为目前国内java方面的教材大多只是告诉你 怎样做 但至于 为什么这样做 却不
  • Java如何比较两个日期的先后顺序

    在 Java 中 你可以使用 java util Date 或 java time LocalDate 类来比较两个日期的先后顺序 以下是使用 java util Date 类比较两个日期的先后顺序的示例代码 java import jav
  • 面对kafka频发的rebalance,该如何处理?

    Kafka 是我们最常用的消息队列 它那几万 甚至几十万的处理速度让我们为之欣喜若狂 但是随着使用场景的增加 我们遇到的问题也越来越多 其中一个经常遇到的问题就是 rebalance 重平衡 问题 但是要想了解 rebalance 那就得先
  • java+内存分配及变量存储位置的区别

    Java内存分配与管理是Java的核心技术之一 之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识 今天我们再次深入Java核心 详细介绍一下Java在内存分配方面的知识 一般Java在内存分配时会涉及到以下区域 寄
  • Mysql常用的三种数据库引擎比较

    点击上方蓝字 快速关注 ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法 它在设计之时就考虑到数据库被查询的次数要远大于更新的次数 因此 ISAM执行读取操作的速度很快 而且不占用大量的内存和存储资源 ISAM的两个主要不足