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

MyISAM和InnoDB存储引擎的区别

目录

  • 前言
    • 存储引擎
  • 区别
    • 事务
    • 外键
    • 表单的存储
    • 数据查询效率
    • 数据更新效率
  • 如何选择

前言

MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。

在这里插入图片描述

存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎

show engines; //查看存储引擎

在这里插入图片描述

在这里插入图片描述

关于数据库的大致架构和基础操作,参考本人博客,这里不过多介绍;

区别

说区别之前说一下他俩的索引底层都是BTREE+ , B+树的数据结构维护索引和数据(m是非聚簇索引,i是聚簇索引,这点注意下)参考本人博客

事务

  • InnoDB支持事务,具有安全性和完整性,系统容灾性强,且通过使用多版本并发控制MVCC来获得高并发性; 参考本人博客
  • MyISAM不支持事务; 系统容灾性弱;

外键

  • InnoDB支持外键
  • MyISAM不支持外键

因此把一个有外键的InnoDB表单转换成MyISAM表单会失败;

表单的存储

通过使用不同存储引擎建立表单查看生成的对应存储文件,发现除了双方共有的 .frm存储表属性外:

  • InnoDB存储引擎表单独存放到一个独立的IBD文件中;(索引和数据放在了一起)–>聚簇索引–>通过主键索引效率高; 普通键进行索引可能需要回表;

  • MyISAM存储引擎表单MYDMYI两部分组成,其中MYD(MYData)用来存放数据文件,而MYI(MYIndex)则用来存放索引文件–>非聚簇索引–>数据存放的是指针,不需要回表,主键索引和普通键索引分开了;

数据查询效率

  • InnoDB不支持全文索引,而 MyISAM 支持全文索引查询效率上 MyISAM更高;
  • InnoDB不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时
    只需要读出该变量即可,速度很快;

数据更新效率

InnoDB的内部优化,包括**磁盘预读(**从磁盘读取数据时采用可预测性读取),自适应哈希(自动在内存中创建hash索引以加速读操作)等, 且能够加速插入操作的插入缓冲区。所以比MyISAM在数据更新能力上更优;

如何选择

  1. 看设计的业务是否需要支持事务,需要–InnoDB;不需要–MyISAM;
  2. 如果select读操作频繁,用MyISAM; 如果数据更新操作使用频繁操作用InnoDB
  3. 考虑系统容灾能力,MyISAM更不容易恢复,InnoDB容易恢复;

既然MySQL5.5版本之后默认了InnoDB,不知道用什么那就InnoDB,跟着主流走不会错;

相关文章:

MyISAM和InnoDB存储引擎的区别

目录前言存储引擎区别事务外键表单的存储数据查询效率数据更新效率如何选择前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。 存储引擎 存储引擎是:数据库管理系统…...

SpringMVC自定义处理多种日期格式的格式转换器

package cn.itcast.utils;import org.springframework.core.convert.converter.Converter;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;/*** 把字符串转换日期*/public class StringToDateConverter implements Converter<String…...

NYUv2生成边界GT(1)

看了cityscape和NYUv2生成边界GT的代码后&#xff0c;因为自己使用的是NYUv2数据集&#xff0c;所以需要对自己的数据集进行处理。CASENet生成边界GT所使用的代码是MATLAB&#xff0c;所以又重新看了一下MATLAB的代码&#xff0c;并进行修改&#xff0c;生成了自己的边界代码。…...

Spring基本概念与使用

文章目录一、Spring概念1.容器2.IoC3.DI4.Ioc与DI的关系二、Spring创建与使用1.Maven2.添加Spring框架支持注&#xff1a;国内的Maven源配置3.简单实例&#xff08;1&#xff09;创建一个Bean对象。&#xff08;2&#xff09;将Bean对象存储到Spring当中&#xff08;3&#xff…...

安恒信息java实习面经

目录1.Java ME、EE、SE的区别&#xff0c;Java EE相对于SE多了哪些东西&#xff1f;2.jdk与jre的区别3.说一下java的一些命令&#xff0c;怎么运行一个jar包4.简单说一下java数据类型及使用场景5.Map跟Collection有几种实现&#xff1f;6.面向对象的特性7.重载和重写的区别8.重…...

第八章:枚举类与注解

第八章&#xff1a;枚举类与注解 8.1&#xff1a;枚举类的使用 ​ 类的对象只有有限个&#xff0c;确定的。我们称此类为枚举类。当需要定义一组常量是&#xff0c;强烈建议使用枚举类。如果枚举类中只有一个对象&#xff0c;则可以作为单例模式的实现方式。 如何定义枚举类 …...

Ceph介绍

分布式存储概述 常用的存储可以分为DAS、NAS和SAN三类 DAS&#xff1a;直接连接存储&#xff0c;是指通过SCSI接口或FC接口直接连接到一台计算机上&#xff0c;常见的就是服务器的硬盘NAS&#xff1a;网络附加存储&#xff0c;是指将存储设备通过标准的网络拓扑结构&#xff…...

remove 和 erase 的区别

remove 和 erase 的区别 以容器vector来说明remove和erase的区别 在STL中&#xff0c;vector容器也提供了remove()和erase()函数&#xff0c;用于从vector中删除元素。虽然这两个函数都可以实现删除元素的功能&#xff0c;但是它们之间还是有一些区别的。 remove() remove(…...

NFTScan:怎么使用 NFT API 开发一个 NFT 数据分析平台?

对很多开发者来说&#xff0c;在 NFT 数据海洋中需要对每个 NFT 进行索引和筛选是十分困难且繁琐的&#xff0c;NFT 数据获取仍是一大问题。而数据平台提供的 API 使得开发者可以通过接口获取区块链上 NFT 的详细信息&#xff0c;并对其进行分析、处理、统计和可视化。在本篇文…...

ECOLOY直接更换流程表单后导致历史流程中数据为空白的解决方案

用户反馈流历史流程打开是空白了没有内容。 一、问题调查分析&#xff1a; 工作流“XX0204 员工培训协议审批流程”workflowId37166产生的7个具体流程中&#xff0c;创建日期为2021年的4个具体流程原先引用的数据库表单应该是“劳动合同签订审批表”(formtable_main_190)&…...

mysql中的共享锁,排他锁,间隙锁,意向锁及死锁机制

一、前言&#xff08;以下均为读完 高性能Mysql第四版 后的个人理解&#xff0c;建议阅读&#xff0c;挺不错的&#xff09;在写锁机制前先简单贴出mysql InnoDB引擎中的事务特性与隔离级别&#xff1a;事务的ACID标准(1)原子性-atomicity&#xff1a;一个事务作为一个不可分割…...

SpringBoot整合MybatisPlus

文章目录前言一、MybatisPlus是什么&#xff1f;二、使用步骤1.导入依赖2.编写配置文件3.编写Controller和实体类4.编写持久层接口mapper5.启动类加包扫描注解6.测试总结前言 本篇记录一下SpringBoot整合MybatisPlus 一、MybatisPlus是什么&#xff1f; MyBatis-Plus&#xff…...

中电金信Gien享汇・大数据专题|金融行业数据架构及模型演进

本期嘉宾 陈子刚 中电金信商业分析事业部华南区总经理 毕业于复旦大学&#xff0c;硕士研究生&#xff1b;拥有16年以上金融行业商业智能领域从业经验&#xff1b;曾就职于中国工商银行、Teradata、东亚银行&#xff0c;服务于平安银行、广发银行、招商银行、广东农信、招商…...

Cadence Allegro 导出Design Cross Section报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Design Cross Section作用3,Design Cross Section示例4,Component Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频 1,概述 <...

【LeetCode】剑指 Offer 23. 链表中环的入口节点 p139 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/c32eOV/ 1. 题目介绍&#xff08;23. 链表中环的入口节点&#xff09; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环&#x…...

LeetCode-96. 不同的二叉搜索树

题目来源 96. 不同的二叉搜索树 递归 1.我们要知道二叉搜索树的性质&#xff0c;对于一个二叉搜索树&#xff0c;其 【左边的节点值 < 中间的节点值 < 右边的节点值】&#xff0c;也就是说&#xff0c;对于一个二叉搜索树&#xff0c;其中序遍历之后形成的数组应该是一…...

JavaWeb基础

Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的&#xff0c;Java applet 是一种当作单独文件跟网页一起发送的小程序&#xff0c;它通常用于在客户端运行&#xff0c;结果得到为用户进行运算或者根据用户互作用定位图形等服务。服务器上需要一些程序…...

C++基础了解-03-C++变量类型

C变量类型 一、变量类型 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。…...

树莓派4b——通过mjpg-streamer使用摄像头

参考博文&#xff1a;(51条消息) 树莓派4b如何打开摄像头_树莓派打开摄像头_会飞的小东的博客-CSDN博客(51条消息) 树莓派4B &#xff08;系统版本11&#xff0c;bullseye&#xff09;更换清华源_树莓派更换清华源_ASSSSHION的博客-CSDN博客这个坑踩了我一星期&#xff0c;找各…...

MySQL运维篇之读写分离

04、读写分离 4.1、介绍 读写分离&#xff0c;简单地说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主数据库提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样能有效地减轻单台数据库的压力。 通过Mycat即可轻易实现上述功能&#xff0c;…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...