mysql存储引擎

2023-11-18

目录

一、存储引擎概念

二、MyISAM特点介绍

三、MyISAM适用的生产场景举例

四、InnoDB特点介绍

五、InnoDB适用生产场景分析

六、企业选择存储引擎的依据

1、需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景

2、 支持的字段和数据类型

3、锁定类型:不同的存储引擎支持不同级别的锁定

4、索引的支持

5、事务处理的支持

七、存储引擎的相关命令

7.1、查看系统支持的存储引擎

7.2、查看表使用的存储引擎

 7.3、修改存储引擎

八、表锁与行锁

九、如何避免死锁?

十、总结


一、存储引擎概念

1、MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎

2、存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式

3、MySQL常用的存储引擎——MyISAM/InnoDB

4、MySQL数据库中的组件,负责执行实际的数据I/O操作

5、MySQL系统中,存储引擎处于文件系统之.上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

二、MyISAM特点介绍

1、MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的

2、MyISAM访问速度快,对事务完整性没有要求

3、MyISAM适合查询、插入为主的应用

4、MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:

4.1、.frm文件存储表结构的定义

4.2、.MYD (MYData)——数据文件的扩展名

4.3、.MYI (MYIndex)——索引文件的扩展名

5、表级锁定形式,数据在更新时锁定整个表

6、数据库在读写过程中会相互阻塞

6.1、会在数据写入的过程阻塞用户数据的读取

6.2、也会在数据读取的过程中阻塞用户的数据写入

7、数据单独写入或读取,速度过程较快且占用资源相对少

8、MyIAM支持的存储格式——静态表、动态表、压缩表

三、MyISAM适用的生产场景举例

1、公司业务不需要事务的支持

2、单方面读取或写入数据比较多的业务

3、MyISAM存储引擎数据读写都比较频繁场景不适合

4、使用读写并发访问相对较低的业务

5、数据修改相对较少的业务

6、对数据业务一致性要求不是非常高的业务

7、服务器硬件资源相对比较差

四、InnoDB特点介绍

1、支持事务,支持4个事务隔离级别

2、MySQL从5.5.5版本开始,默认的存储引擎为 InnoDB

3、读写阻塞与事务隔离级别相关

4、能非常高效的缓存索引和数据

5、表与主键以簇的方式存储

6、支持分区、表空间,类似oracle数据库

7、支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

8、对硬件资源要求还是比较高的场合

9、行级锁定,但是全表扫描操作仍然会是表级锁定

10、InnoDB 中不保存表的行数,如 select count() from table;(统计表中所有字段的行数) 时,InnoDB 需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表

11、对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引

12、清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表

五、InnoDB适用生产场景分析

1、业务需要事务的支持

2、行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成

3、业务数据更新较为频繁的场景——论坛,微博等

4、业务数据一致性要求较高——银行业务

5、硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘I0的压力

六、企业选择存储引擎的依据

1、需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景

2、 支持的字段和数据类型

2.1、所有引擎都支持通用的数据类型

2.2、但不是所有的引擎都支持其它的字段类型,如二进制对象

3、锁定类型:不同的存储引擎支持不同级别的锁定

3.1、表锁定: MyISAM 支持

3.2、行锁定: InnoDB 支持

4、索引的支持

4.1建立索引在搜索和恢复数据库中的数据时能显著提高性能

4.2、不同的存储弓|擎提供不同的制作索引的技术

4.3、有些存储引擎根本不支持索引

5、事务处理的支持

5.1、提高在向表中更新和插入信息期间的可靠性

5.2、可根据企业业务是否要支持事务选择存储引擎

七、存储引擎的相关命令

7.1、查看系统支持的存储引擎

7.2、查看表使用的存储引擎

 

 7.3、修改存储引擎

 

八、表锁与行锁

表锁会导致表中数据的读写相互阻塞

行锁如果使用不当会导致死锁(死锁一般是事务相互等待对方释放资源,最后形成环路导致死锁)

九、如何避免死锁?

使用更合理的业务逻辑,以固定的顺序访问表和行数据

大事务拆小,大事务更容易出现死锁,如果业务允许,将大事务拆成多个小事务执行

在同一个事务中,尽可能做一次锁定所需的所有资源,减少死锁概率

降低隔离级别。如果业务允许,可以降低隔离级别,比如把RR调整成RC,这样可以避免很多造成死锁的因素

为表字段添加合理的索引。因为不使用会进行表级锁定,死锁的概率就会提高

十、总结

1、事务的ACID特性——原子性、一致性、隔离性、持久性

2、当多个客户端并发地访问同一个表时,可能出现下面的一致性问题——脏读、不可重复读、幻读、丢失更新

3、根据不同的生产环境选择不同的存储引擎才能有效的提高资源利用率

4、死锁现象的发生会造成许多损失,且多半是因为高并发、索引不合理造成的,因此语句的优化就非常重要

  

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

mysql存储引擎 的相关文章

  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 如果一列没有值,MySQL 返回最大值或 null

    我尝试获取 mysql select 的最大值 但如果有一行不包含时间戳 则希望将其设置为 null empty 0 表统计数据 简化 ID CLIENT ORDER DATE CANCEL DATE 1 5 1213567200 2 5
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 如何使用 Java Apache POI 隐藏 Excel 工作表中以下未使用的行?

    我正在使用数据库中的数据填充模板 Excel 工作表 for Map
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 如何向页面添加 HTML 页眉和页脚?

    如何使用 itext 从 html 源添加标题到 pdf 目前 我们已经扩展了 PdfPageEventHelper 并重写了这些方法 工作正常 但当我到达 2 个以上页面时 它会抛出 RuntimeWorkerException Over
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 为什么我的浮点数大于 1 时在 MYSQL 中存储为 .9999?

    我将进程时间作为 float 4 4 存储在 MySQL 数据库中 start time microtime TRUE things happen in my script end time microtime TRUE process t

随机推荐

  • 相应通道无电压但ADC的值却在大幅变化且不等于0的可能原因

    今天分享一个自己的粗心引起的现象 就是之前在做ADC时候 采用单通道 规则组 和软件触发 发现ADC采集的值一直在变化 而且我都没有输入相应的电压 按理来说 ADC输出的值应该为0 10 存在偏差 但是其值却不等于0并且一直不断的变化 于是
  • 基于免疫优化算法的物流配送中心选址规划研究(Matlab实现)

    目录 1 概述 2 物流配送中心选址规划研究 3 Matlab代码 4 结果 1 概述 影响物流配送中心选址的因素有很多 精确选址优化问题亟待解决 通过充分考虑货物的配送时间 将免疫算法加入其中 介绍了物流配送选址模型的构建以及免疫算法实现
  • Spring AOP源码解析-拦截器链的执行过程

    一 简介 在前面的两篇文章中 分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器 以及如何创建代理对象的过程 现在得到了 bean 的代理对象 且通知也以合适的方式插在了目标方法的前后 接下来要做的事情 就是执行通知
  • 主流开源数据库的技术特点(转载)

    点评主流开源数据库的技术特点 2006 02 24 来自 计算机世界 曹江华 随着开放源代码软件的使用越来越广泛 像Linux操作系统一样 开放源代码数据库的出现也有其必然性 在当Oracle IBM Microsoft Sybase 等几
  • 振动数据采集上位机(包含实时智能算法分析)开发

    功能模块介绍 上位机界面如下 开始采集按钮 当点击该按钮后 上位机开始采集数据 并界面展示时域数据信号 在开始采集之前必须先输入串口号和波特率和采样率 FFT分析 当点击按钮后 界面展示FFT频谱 系统参数按钮 可继续扩展 当点击该按钮后
  • 2的31次方和3的21次方哪个大,123组成最大的数是多少?

    123这三个数字组成最大的数是什么数 面试官告诉小孙 123这三个数字组成最大的数是什么数 我希望你能够在5分钟之内回答出来 小孙当时连想都没有想 123组成的最大数字 当然就是123了 当小孙把这个答案告诉面试官的时候 面试官摇摇头 然后
  • Min Difference 二分优化

    题目链接 暴力的时间复杂度是O n 2 n 2 n2 只能在查询的时候优化一下 可以手写一个左闭右开的二分 也可以使用库函数 l
  • 英语语法笔记——并列句(二)

    找出长难句主干的三个步骤 看标点符号 看标点符号 看逗号 判断都在前面和逗号后面的部分 看看 介词 从句和非谓语动词在前面还是后面 如果在前面主干就在后面 如果在后面 主干就在前面 介词等 主干 主干 介词等 看分号 分号前后相当于一个并列
  • k8s 裸机安装 nginx1.19 ingrass

    k8s 裸机安装 nginx1 19 ingrass deploy yaml文件如下 apiVersion v1 kind Namespace metadata name ingress nginx labels app kubernete
  • javaAPI

    第一章 集合框架 集合框架 多个接口和类 不知道存在的对象的数量或者需要更复杂的方式来存储对象时 一一对应时也可以使用 可以使用集合框架 Java集合框架提供一套性能优良 使用方便得接口和类 它们为与java util包中 a Collec
  • 英语什么叫做自控力720词

    Two common terms from the psychological literature are self regulation and self control Self regulation is your ability
  • idea导入项目,Lombok插件安装了,且配置文件中配置了,还是不能正常启动,表示找不到get、set方法

    1 保证安装了Lombok插件 2 保证maven或者gradle中添加了依赖 3 如下配置
  • E45: ‘readonly‘ option is set (add ! to override)

    vim 修改文件出现错误 E45 readonly option is set add to override 其实这是权限造成的 文件设置成了只读权 只读文件修改前需要执行sudo 但是已经修改了 如何强制保存呢 只需要保存的时候执行如下
  • 【Python】读取txt文件,获取指定行中指定位置数据

    问题描述 需求 读取大约有200多行的txt文件 获取17 216行中每行中指定位置中的数值 实现 coding utf 8 Date 2020 5 21 21 53 Author Pangpd FileName read log py I
  • pytorch: tensor类型的构建与相互转换

    Summary 主要包括以下三种途径 使用独立的函数 使用torch type 函数 使用type as tesnor 将张量转换为给定类型的张量 使用独立函数 import torch tensor torch randn 3 5 pri
  • mpvue中配置vuex并持久化到本地Storage

    demo代码 github com jianjian we 配置vuex和在vue中相同 只是mpvue有一个坑 就是不能直接在new Vue的时候传入store 步骤 1 在src目录下新建一个store目录 结构如下 官方推荐 vuex
  • 微信公众号网页开发jweixin.js的使用

    首先申请测试账号 获取以下信息 使用你的appId和appsecret获取token https api weixin qq com cgi bin token grant type client credential appid wxa4
  • ESP32-cam 初体验 从esp32-cam的购买到局域网监控的实现

    ESP32 cam小项目 helloworld项目 前言 手头有一块esp32 cam闲置很久了 因为比赛和找工作的事情导致许欸小延期了很久 还是因为懒 最近从小仓库把板子捞出来了 上手玩一玩 本次学习参考了B站up 小铭同学 的教程 教程
  • 力扣 2697. 字典序最小回文串

    题目来源 https leetcode cn problems lexicographically smallest palindrome C 题解 从两端往中间判断 不同时则用字典序小的替换字典序大的 class Solution pub
  • mysql存储引擎

    目录 一 存储引擎概念 二 MyISAM特点介绍 三 MyISAM适用的生产场景举例 四 InnoDB特点介绍 五 InnoDB适用生产场景分析 六 企业选择存储引擎的依据 1 需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景 2 支