InnoDB 与 MyISAM的比较(含其他存储引擎)
文章目录
- 什么是搜索引擎
- MyISAM
- InnoDB
- 比较表格
MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。
什么是搜索引擎
MySQL的存储引擎是用于管理数据的底层系统组件,它定义了数据如何存储、检索和管理。不同的存储引擎提供不同的功能和性能特点,以满足不同类型的应用需求。
MyISAM
MyISAM 是一个MySQL数据库管理系统的存储引擎,它具有一些特点和适用范围,如下:
特点:
-
不支持事务:MyISAM 不支持事务,这意味着它不适合需要支持ACID属性(原子性、一致性、隔离性、持久性)的应用,如银行系统或在线交易处理系统。
-
表级锁:MyISAM 使用表级锁定,这意味着当一个用户对表进行写操作时,整个表将被锁定,这会导致并发写操作性能较差,不适合高并发的应用。
-
高性能读取:MyISAM 对于读取操作(如SELECT语句)性能较高,特别适用于只读或很少写入的应用,如博客、新闻网站等。
-
支持全文索引:MyISAM 支持全文索引,这使得它在全文搜索应用中表现出色。
-
低内存消耗:MyISAM 对内存的需求相对较低,因此适用于资源受限的环境。
适用范围:
MyISAM 最适合于以下类型的应用:
-
只读或很少写入的应用:由于不支持事务和表级锁,MyISAM 不适合需要高并发写入操作的应用。但对于只读或很少写入的应用,它的高性能读取操作可以提供良好的性能。
-
全文搜索应用:MyISAM 的全文索引支持使它成为实现全文搜索的不错选择。
-
资源受限的环境:MyISAM 对内存的需求相对较低,因此在资源受限的环境中,它可能是更好的选择。
-
非关键数据:在某些应用中,MyISAM 可以用于存储非关键数据,以减轻对InnoDB等支持事务和锁机制的存储引擎的压力。
需要注意的是,随着时间的推移,InnoDB等支持事务的存储引擎已成为MySQL的主要选择,因为它们提供了更多的特性和数据完整性,因此在大多数生产环境中,MyISAM 的使用已经减少。如果您需要支持事务、并发写入和数据完整性,那么通常会选择InnoDB或其他支持ACID属性的存储引擎。
InnoDB
InnoDB 是MySQL数据库管理系统的一种存储引擎,与 MyISAM 相比具有一些不同的特点和适用范围:
特点:
-
支持事务:InnoDB 是一种支持事务的存储引擎,它遵循ACID属性(原子性、一致性、隔离性、持久性),使其适合处理需要数据完整性和事务支持的应用,如银行系统、电子商务平台和管理系统。
-
行级锁:InnoDB 使用行级锁,这意味着在并发写入操作时,不会锁定整个表,而是只锁定正在修改的行,从而提高了并发性和性能。
-
外键支持:InnoDB 支持外键关系,这对于维护数据完整性和关系数据库非常重要。
-
崩溃恢复:InnoDB 提供了崩溃恢复功能,可以在数据库发生故障或崩溃时自动恢复数据,确保数据的持久性。
-
高并发性:由于支持事务和行级锁,InnoDB 适合高并发写入操作,可以处理大量同时进行的事务。
-
支持外键:InnoDB 支持外键关系,可以维护数据的完整性和关联性。
适用范围:
InnoDB 最适合以下类型的应用:
-
需要事务支持的应用:银行系统、电子商务平台、管理系统等需要数据完整性和事务支持的应用受益于InnoDB的特性。
-
高并发写入操作:由于其行级锁机制和高并发性能,InnoDB 适合处理大量并发写入操作的应用,如社交媒体、在线游戏和在线协作工具。
-
数据完整性要求高的应用:如果应用程序需要维护外键关系和数据完整性,InnoDB 是更好的选择,因为它支持外键约束。
-
崩溃恢复要求高的应用:对于需要可靠的崩溃恢复机制的应用,InnoDB 提供了自动的数据恢复功能。
InnoDB 是 MySQL 中最常用的存储引擎之一,适用于大多数生产环境,特别是需要事务支持、高并发写入、数据完整性和可靠性的应用。
比较表格
下面是MyISAM和InnoDB的比较:
| 项 | MyISAM | InnoDB |
|---|---|---|
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 |
| 缓存 | 只缓存索引,不缓存真实数据,对内存要求较低,内存大小对性能有决定性的影响 | 缓存索引和真实数据,对内存要求较高,内存大小对性能有重要影响 |
| 自带系统表 | 有(使用) | 无(不使用) |
| 关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写、事务、更大资源 |
| 默认安装 | 是 | 是 |
| 默认使用 | 否 | 是 |
以下是MyISAM、InnoDB、MEMORY、MERGE和NDB的特点比较,整理成表格形式:
| 特点 | MyISAM | InnoDB | MEMORY | MERGE | NDB |
|---|---|---|---|---|---|
| 存储限制 | 有(最大64TB) | 有 | 没有 | 有 | 有 |
| 事务安全 | 不支持 | 支持 | 不支持 | 不支持 | 不支持 |
| 锁机制 | 表锁,不适合高并发操作 | 行锁,适合高并发操作 | 表锁 | 表锁 | 行锁 |
| B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 哈希索引 | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
| 全文索引 | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
| 集群索引 | 支持 | 支持 | 不适用 | 不适用 | 不支持 |
| 数据缓存 | 只缓存索引,不缓存真实数据 | 缓存索引和真实数据,对内存要求较高 | 不适用 | 不适用 | 支持 |
| 索引缓存 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 数据可压缩 | 支持 | 支持 | 不适用 | 支持 | 不适用 |
| 空间使用 | 低 | 高 | 中等 | 低 | 低 |
| 内存使用 | 低 | 高 | 中等 | 低 | 高 |
| 批量插入的速度 | 高 | 低 | 高 | 高 | 高 |
| 支持外键 | 不支持 | 支持 | 不支持 | 不支持 | 支持 |
相关文章:
InnoDB 与 MyISAM的比较(含其他存储引擎)
文章目录 什么是搜索引擎MyISAMInnoDB比较表格 MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。 什么是搜索引擎 MySQL的存储引擎是用于管理数据的底层系统组件,它定义了数据如何存储、检索和管理。不同的存储引擎提…...
系统韧性研究(2)|系统韧性如何关联其他质量属性?
对大多数人来说,如果一个系统在逆境中继续执行它的任务,那么它会被认为具有韧性。换句话说,尽管过度的压力或多或少都会导致系统中断,但如果系统依然能够正常运行并提供所需的能力,则可认为该系统具备韧性。 系统韧性…...
电脑桌面记事本便签软件哪个好?
很多人的电脑或者手机上都离不开一款好用的便签软件,使用便签软件可以帮助大家记事,提醒大家按时完成各项任务,但是自带的记事本便签软件不论从外观还是功能方面都有一定的欠缺,在使用过程中很容易耽误事情。 功能全面外观好看的…...
可视化(Visual) SQL初探
一、背景 在当今数字化时代,数据信息作为企业和组织的宝贵资源之一,如何挖掘其中的价值并帮助企业和组织个体决策,已然成为炙手可热的话题。数据分析作为其具体载体,是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程…...
多目标权重融合方式
1. 多目标学习在推荐系统的应用(MMOE/ESMM/PLE) - 知乎 ## combine loss ctr_log_var tf.get_variable(namectr_log_var,dtypetf.float32,shape(1,),initializertf.zeros_initializer() ) ysl_log_var tf.get_variable(nameysl_log_var,dtypetf.float32,shape(1,),initializ…...
软件工程与计算总结(二十)软件交付
软件交付是软件项目的结束阶段 ,标志着软件开发任务的完成——其作为一个分水岭,区分了软件开发与软件维护两个既连续又不同的软件产品生存状态~ 在经历连续的辛苦工作之后,开发人员在胜利曙光之前难免会忽视软件交付阶段的一些工作——在准…...
02 开闭原则
官方定义: 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修 改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保 软件系统开发和维护过程的可靠性。 通俗解释: 对扩展开放…...
LamdaUpdateWapper失效问题
因为入参是json的文本格式,结果ID多输入了一个空格直接修改返回条数为0。 比如ID入参在swagger中或前端入参:“412210293355454”,结果不小心为“ 412210293355454”, 而且几乎看不出来这个空格。 记住:事出原因必有妖…...
“权限之舞:Linux安全之道”
W...Y的主页😊 代码仓库分享💕 🍔前言: 在之前的Linux博客中,我们学习了基础的Linux指令,具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中,只有在root账号中…...
Visual Studio Code官网下载、vscode下载很慢、vscode下载不了 解决方案
前言 开发界的小伙伴们对于Visual Studio Code开发环境来可以说非常熟悉了,但由于在Visual Studio Code官网的下载速度非常的慢,即便开了代理也是一样的很慢、甚至下载被中断,几乎不能下载。 解决方案 1、在Web浏览器上打开vscode官网&#…...
URL、域名和网址的区别
网址、域名和URL 都用于描述在互联网上定位资源的标识符,通常它们可以互换使用,但严格来说有区别: URL(Uniform Resource Locator):URL是统一资源定位符的缩写,它是一个包含地址信息的完整字符串…...
【oceanbase】centos7/kylinv10部署oceanbase(x86版本)
1. 修改系统 vim /etc/sysctl.conf fs.file-max 102400 net.nf_conntrack_max 1024000 net.netfilter.nf_conntrack_max 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下…...
论文导读 | 支持事务与图分析的图存储系统
事务系统保证了系统的数据一致性,确保事务更新的原子性或是不同事务之间的数据隔离性等在多线程并发环境下所必不可少的ACID特性。而在今天快速变化的商业环境下,诸如物流和供应链,金融风控和欺诈检测等场景都需要图分析系统提供对数据动态更…...
Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )
ESLint 在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一…...
【C++】命名空间和using namespace std的注意事项
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
修改51单片机中数组元素的值
在8051单片机中,code关键字用于将数据存储在ROM中。由于ROM是只读的,所以在运行时无法直接修改seven_seg数组中的值。 如果您想在main函数中修改seven_seg[1]的值为0xc0,您可以将seven_seg数组定义为可写的变量,而不是存储在ROM中…...
Ruby和面向对象技术
Ruby和许多极为流行的编程语言都是面向对象的。多数的面向对象编程语言,每个对象都是一个样例或者既定类的实例以及独立对象的行为。 一、创建一个通用对象 创建一个通用对象 obj Object.new定义通用对象的行为 def obj.talk puts "I am an object"p…...
C++11常用新特性——可变参数模板
可变参数模板 C11中,可变参数模板是一个非常强大的特性,它允许函数和类模板接受任意数量和类型的参数,这为类型的安全编程提供了更广泛的灵活性。下面我将详细介绍这一新特性。 基础概念: 可变参数模板允许你传递多个类型和数量…...
SpringCloud-Seata
一、介绍 (1)实现分布式事务 (2)解决Spring只支持单机事务 (3)事务ID TC(事务协调者) TM(事务管理者) RM(资源管理者)...
java击球小游戏运行代码
创建一个图形化的小游戏通常需要使用Java图形库,例如Swing或JavaFX。下面是一个使用JavaFX创建的简单的图形化小游戏示例,其中一个小球会在窗口内移动,你需要点击小球以增加得分: import javafx.application.Application; import…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
