mysql 存储引擎系列 (二) Innodb 存储引擎 和 myisam 存储引擎

InnoDB 引擎

  1. 支持外键
  2. InnoDB是MySQL默认事务型引擎,它被设计用来处理大量的短期事务。可以确保事务的完整提交(commit)和回滚(Rollback)
  3. 增加和查询,且数据量少的,MyIsam 高效, 除了增加和查询外,还需要更新、删除操作,那么,优先选择 InnoBD存储引擎
  4. 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎
  5. 数据文件结构
    表名.frm 存储数据结构 (mysql 8.0 取消了xx.frm ,合并在 xx.idb中)
    表名.idb 存储数据和索引 (索引即数据)
  6. InnoDB是为处理巨大数据量的最大性能设计
  7. 对比Myisam 的存储引擎,InnoDB的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引
  8. myisam 只缓存索引,不缓存真实数据;InnoDB 不仅缓存索引还要缓存真实数据, 对内存要求比较高,而且内存大小对性能有决定性的影响

MyISAM 引擎:主要的非事务处理的存储引擎

  1. myisam特性:
    全文索引、压缩、空间函数、
    不支持事务、外键、行级锁(innodb 支持),只支持表级锁。
    因为不支持事务,所以 崩溃后无法完全恢复
  2. 优势是访问的速度快,对事物完整性没有要求或者以select 、insert为主的应用
  3. 针对数据统计有额外的常数存储。故而count(*) 的查询效率很高
  4. 数据文件结构
    表名.frm 存储表结构
    表名.MYD 存储数据(mydata)
    表明.MYI 存储索引(MyIndex)
    5、应用场景:只读应用或者以读为主的业务

MyISAM 和 InnoDB

mysql5.5 之前默认存储引擎是MyISAM,5.5之后改成 InnoDB
首先对应InnoDB存储引擎,提供了良好的事物管理,崩溃修复能力和并发控制。因为InnoDB存储引擎 支持事物,所以对于事物完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外,还包含很多更新、删除操作,像财务系统等对数据准确性要求较高的系统。
缺点:读写效率稍差,占用的数据空间相对比较大。
其次对于Myisam存储引擎,如果是小型应用,系统以读操作和插入操作为主,只有很少的更新、删除操作,并且对于事务的要求没有那么高,则可以选择这个存储引擎。
Myisam存储引擎的优势在于 占用空间小,处理速度快。
缺点:不支持事务的完整性和并发性

在这里插入图片描述

1、InnoDB存储引擎
InnoDB是事务性数据库首选引擎,InnoDB从Mysql5.5.5开始就成为数据默认的存储引擎,是MySQL8.0之后最重要,使用最广泛的存储引擎。支持事务安全(ACID),支持行锁定和外键。

InnoDB主要特性:
InnoDB支持事务:事务是数据库操作的基本单位,它是一组数据库操作的集合,要全部执行成功,要么全部不执行。InnoDB存储引擎支持ACID事务,保证了数据库的可靠性和一致性。

在MySQL中,使用START TRANSCTION语句开启一个事务,使用COMMOT语句提交事务,使用ROLLBACK语句回滚事务。

执行行级锁:行级锁是一种并发控制机制,它可以在不同事务之间实现数据的隔离性和一致性。InnoDB存储引擎支持行级锁,能够提高并发性能和可扩展性。

在MySQL中,可以使用SELECT … FOR UPDATE语句来获取行级锁,保证在更新操作时,其他事务不能修改行数据。

支持MVCC:MVCC是一种多版本并发控制机制,它可以在不同事务之间实现数据的隔离性和一致性。InnoDB存储引擎支持MVCC,能够保证不同事务之间的隔离性和一致性。

在MySQL中,可以使用READ COMMITTEND隔离级别来支持MVCC机制。在READ COMMITTED隔离级别下,每个事务只能看到已提交的数据版本,不能看到其他事务未提交的数据版本。

支持外键:在MySQL中,可以使用FOREIGN KEY约束来支持外键约束。在创建表时,可以使用FOREIGN KEY语句定义外键约束,确保在进行数据操作时,关联表之间的数据一致性。

支持自动增长列:在MySQL中,可以使用AUTO_INCREMENT关键字定义自动增长列。在使用InnoDB存储引擎时,自动增长列实现方式时在表中创建一个名为AUTO_INCREMENT的隐藏列,该列用于存储下一个自动增长的值。

支持崩溃恢复:InnoDB存储引擎支持崩溃恢复,能够保证数据库在崩溃后可以快速恢复到正常状态。当数据库发生崩溃时,InnoDB存储引擎会自动启动崩溃恢复过程,将未完成的事务进行回滚或者重做,从而保证数据的一致性。

2、MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。在 Web,数据仓储和其他应用环境使用的存储引擎较多。MyISAM拥有较高的插入、查询速度,但不支持事务和外键。

MyISAM主要特性:
不支持事务;
表级锁定:在MySQL中,MyISAM存储引擎中,当发生数据更新时,会锁定整个表,以防止其他会话对该表中数据的同时修改所致的混乱。这样做可以使得操作简单,但是会减少并发量。
读写相互阻塞:在MyISAM类型表中,即不可以在向数据表中写入数据的同时另一个会话也向该表写入数据,也不允许其他的会话读取该表中的数据。只允许多个会话同时读取该数据表中的数据。
只会缓存索引,不会缓存数据:缓存,是指数据库在访问磁盘数据时,将更多的数据读取进入内存,这样可以使得当访问这些数据时,直接从内存中读取而不是再次访问硬盘。MyISAM可以通过key_buffer_size缓存索引,以减少磁盘I/O,提升访问性能。MyISAM数据表并不会缓存数据。
读取速度较快,占用资源较少;
不支持外键约束;
支持全文索引;
MyISAM适用场景:
不需要事务支持的场景;
读取操作比较多,写入操作较少;
数据并发较低的场景;
硬件条件比较差的场景;
在配置数据库读写分离场景下,从库可以使用MyISAM索引;
3、Memory存储引擎
MySQL中Memory存储引擎是一个置于内存中的表,其采用的存储介质是内存。响应速度很快。但是当MySQL守护进程崩溃的时候数据会丢失。Memory存储引擎是存储的数据类型是长度不变的类型,blob/text类的数据类型不可用。

Memory存储引擎特性:
存储瞬时非关键数据;

内存存储,可实现快速访问和低延迟。

只读或读取是主要数据访问模式:每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。

支持数据类型有限:不支持Text和Blob数据类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型。

支持表级锁:在访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈。

查询中存在临时表且表中有BLOB、TEXT类型的字段,那么在这个临时表会自动转化为MyISAM类型的表。性能会急剧降低。

默认索引使用Hash索引。

内存表特别大时,自动转换为MyISAM类型实体表。

4、CSV存储引擎
CSV存储引擎是以CSV文件的方式存储数据。CSV是MySQL中相对比较简单并方便的存储引擎。它简单是因为其创建和使用简单。存储文件是CSV文件,可以直接对CSV文件进行修改。CSV存储引擎只有在MySQL5.0版本之后才支持。

CSV存储引擎特性:
数据以文本方式存储:.CSV文件存储表内容,CSM文件存储表的元数据如表状态和数据量,.frm文件存储表结构信息。
列不能为NULL;
不支持索引;
可对数据文件进行直接编辑;
CSV存储引擎的特性,决定CSV非常适合在数据库中担任中间交换表的角色。如对数据进行导入运维时,可以使用EXCEL转为CSV中直接复制覆盖表,并通过SQL语句对数据进行操作。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
myisam:索引 MyI 和数据 myd 是分开的, 所以没有聚聚索引。
innodb:支持聚簇索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110989.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片,重量,详情描述等详细信息 。 获取商品详情接口API是一种用于…

私域流量的本质是什么?

私域流量的本质可以总结为以下几点: ①用户拥有权: 私域流量的关键是企业拥有对用户数据和互动的掌控权 ②长期价值: 建立持久的、互惠的关系,以便长期吸引、留住客户,并不断提高他们的价值。这与公域流量通常更侧重于短期转化的特性不同。…

双指针算法,基础算法实践,基本的算法的思想,双指针算法的实现

一,定义 双指针算法是一种常用于解决数组和链表问题的算法技巧。它的核心思想是使用两个指针在数据结构中按照一定的规则移动,从而达到快速搜索或处理数据的目的。这个技巧通常用于优化算法,降低时间复杂度,提高程序的执行效率。…

搭建微服务架构、实现服务调用

OpenFeign:Spring Cloud声明式服务调用组件 OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件,它的出现就是为了替代进入停更维护状态的 Feign。 OpenFeign 常用注解 使用 OpenFegin 进行远…

原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件

1.原生微信小程序使用 wxs 1.内嵌 WXS 脚本 2. 定义外链 wxs 3. 使用外连wxs 在这里插入图片描述 2. 微信小程序使用 vant weapp 1.安装步骤 2. 安装包管理(package.json)文件的方法 操作顺序 :文档地址 如果使用 typescript 需要操作步骤3,否则不…

边缘计算网关是如何提高物联网的效率的?

随着物联网的持续发展,物联网应用的丰富和规模的扩大,带来了海量的数据处理、传输和计算需求。 传统的“数据中央处理”模式越来越难以适应物联网的扩展速度,在这一趋势下,边缘计算在物联网系统的部署运营中就发挥出了显著的增效…

React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

文章目录 React是什么? 为什么要学习React React开发前准备 创建React项目 React项目结构简介 React组件化 初识JSX 渲染JSX描述的页面 JSX语法 JSX的Class与Style属性 JSX生成的React元素 条件渲染(一) 条件渲染 &#xff0…

SpringMVC 写个 HelloWorld

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

工作中你会使用到 grpcurl 吗?

在平时的开发过程中,我们一般是 http 接口对外, grpc 接口对内部微服务 相信对于如何去请求 http 接口,大家都很熟悉了 如果是 inux 里面使用 curl 命令 在 windows 里面我们可以使用 postman 来请求接口 如果对于一个云上开发的接口的话&a…

设计模式之建造者模式

文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼…

嵌入式通用硬件模块设计——串口音频播放模块

模块功能展示: 串口音频控制模块 一、简介 方案为串口音频播放芯片功放芯片,口音频播放芯片IC为my1690-16s,功放为PAM8406。 1、my1690-16s 迈优科技的一款由串口控制的插卡MP3播放控制芯片,支持串口控制播放指定音频、音量调节…

兼具传统和新锐基因的极氪,是怎么做用户运营的?|新能源车专题研究

主笔:浣芳黛 出品:增长黑盒研究组 近几个月来,新能源车势头强劲,众多车企纷纷传出连月增长和再创新高的捷报,在当下整体经济复苏缓慢的映衬下,显得格外耀眼。 于是,增长黑盒近期针对新能源车企展…

QGIS学习2-QGIS设置中文界面、导出地图、修改显示投影、自定义投影等

1、设置中文界面 参照官方给的提示: https://qgis.org/en/site/getinvolved/translate.html 2、QGIS功能介绍 QGIS支持功能还是很全面的。 而且提供了很全面的插件库 https://plugins.qgis.org/plugins/ 3、工程文档介绍 可以直接从菜单栏对工程文档进行操作…

2023.8.25 关于 Selenium 常用 API 详解

目录 引言 打开页面 查找页面元素 输入文本 点击操作 提交操作 清除文本 获取文本和属性值 ​编辑 选择多个元素 获取页面标题和URL 等待操作 浏览器操作 多层框架定位 窗口操作 屏幕截图 下拉框元素选择操作 ​编辑 执行脚本 文件上传 引言 本文讲的所有…

java属性映射使用MapStruct的坑

目录 1.实体类和映射类只加注解Data 2.将Data换成getter和setter后build 3.那么此时我把getter和setter换成lombok的getter和setter 1.实体类和映射类只加注解Data 映射关系类 这个时候运行 提示源参数中不存在 注意这个文件夹 2.将Data换成getter和setter后build package c…

【C# Programming】编程入门:数组、操作符、控制流

目录 一、数组 1、数组的声明 1.1 一维数组声明: 1.2 多维数组声明: 2、数组的实例化和赋值 2.1 数组在声明时通过在花括号中使用以逗号分隔的数据项对数组赋值, 例如: 2.2 如果在声明后赋值,则需…

【JS案例】JS实现手风琴效果

JS案例手风琴 🌟效果展示 🌟HTML结构 🌟CSS样式 🌟实现思路 🌟具体实现 1.绑定事件 2.自定义元素属性 3.切换菜单 🌟完整JS代码 🌟写在最后 🌟效果展示 🌟HTML…

Java课题笔记~ 综合案例

3.综合案例 3.1 功能介绍 以上是我们在综合案例要实现的功能。除了对数据的增删改查功能外,还有一些复杂的功能,如 批量删除、分页查询、条件查询 等功能 批量删除 功能:每条数据前都有复选框,当我选中多条数据并点击 批量删除 按…

PHP环境配置

1.服务器 简单理解:服务器也是一台计算机,只是比平时用到的计算机在性能上更强大,开发中通常都需要将开发好的项目部署到服务器进行访问,例如:我们可以访问百度、淘宝、京东等,都是因为有服务器的存在&…

【C++】—— 异常处理

前言: 本期,我将给大家讲解的是有关 异常处理 的相关知识! 目录 (一)C语言传统的处理错误的方式 (二)C异常概念 (三)异常的使用 1、异常的抛出和捕获 1️⃣ 异常的…