【MySQL进阶】存储引擎

文章目录

    • 存储引擎
      • 基本介绍
      • 引擎对比
      • 引擎选择
      • 引擎操作

存储引擎

基本介绍

对比其他数据库,MySQL 的架构可以在不同场景应用并发挥良好作用,主要体现在存储引擎,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取分离,可以针对不同的存储需求可以选择最优的存储引擎
存储引擎的介绍:

  • MySQL 数据库使用不同的机制存取表文件 , 机制的差别在于不同的存储方式、索引技巧、锁定水平等不同的功能和能力,在 MySQL 中,将这些不同的技术及配套的功能称为存储引擎
  • Oracle、SqlServer 等数据库只有一种存储引擎,MySQL 提供了插件式的存储引擎架构,所以 MySQL 存在多种存储引擎 , 就会让数据库采取了不同的处理数据的方式和扩展功能
  • 在关系型数据库中数据的存储是以表的形式存进行,所以存储引擎也称为表类型(存储和操作此表的类型)
  • 通过选择不同的引擎,能够获取最佳的方案, 也能够获得额外的速度或者功能,提高程序的整体效果。

MySQL 支持的存储引擎:

  • MySQL 支持的引擎包括:InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE 等
  • MySQL5.5 之前的默认存储引擎是** MyISAM**,5.5 之后就改为了** InnoDB**

引擎对比

InnoDB 存储引擎:(MySQL5.5 版本后默认的存储引擎)

  • 特点:支持事务外键操作支持行级锁,支持并发控制。对比 MyISAM 的存储引擎,InnoDB 写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引
  • 应用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作
  • 存储方式:
    • 使用共享表空间存储, 这种方式创建的表的表结构保存在 .frm文件中, 数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path 定义的表空间中,可以是多个文件
    • 使用多表空间存储,创建的表的表结构存在 .frm 文件中,每个表的数据和索引单独保存在 .ibd 中

image.png

  • 逻辑存储结构

image.png

  • 表空间 : InnoDB存储引擎逻辑结构的最高层,ibd文件其实就是表空间文件,在表空间中可以包含多个Segment段。
  • 段 : 表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
  • 区 : 区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一个区中一共有64个连续的页。
  • 页 : 页是组成区的最小单元,页也是InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。
  • 行 : InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时所指定的字段以外,还包含两个隐藏字段(后面会详细介绍)。

MyISAM 存储引擎:

  • 特点:不支持事务和外键,读取速度快,节约资源,支持表锁,不支持行锁
  • 应用场景:适用于读多写少的场景,对事务的完整性要求不高,比如一些数仓、离线数据、支付宝的年度总结之类的场景,业务进行只读操作,查询起来会更快
  • 存储方式:
    • 每个 MyISAM 在磁盘上存储成 3 个文件,其文件名都和表名相同,拓展名不同
    • 表的定义保存在 .sdi 文件,表数据保存在 .MYD (MYData) 文件中,索引保存在 .MYI (MYIndex) 文件中

MEMORY 存储引擎:

  • 特点:每个 MEMORY 表实际对应一个磁盘文件 ,该文件中只存储表的结构,表数据保存在内存中,且默认使用 HASH 索引,所以数据默认就是无序的,但是在需要快速定位记录可以提供更快的访问,服务一旦关闭,表中的数据就会丢失,存储不安全
  • 应用场景:缓存型存储引擎,通常用于更新不太频繁的小表,用以快速得到访问结果
  • 存储方式:表结构保存在 .sdi文件中 ,数据都存在内存中

MERGE 存储引擎:

  • 特点:
    • 是一组 MyISAM 表的组合,这些 MyISAM 表必须结构完全相同,通过将不同的表分布在多个磁盘上
    • MERGE 表本身并没有存储数据,对 MERGE 类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的 MyISAM 表进行的
  • 应用场景:将一系列等同的 MyISAM 表以逻辑方式组合在一起,并作为一个对象引用他们,适合做数据仓库
  • 操作方式:
    • 插入操作是通过 INSERT_METHOD 子句定义插入的表,使用 FIRST 或 LAST 值使得插入操作被相应地作用在第一或者最后一个表上;不定义这个子句或者定义为 NO,表示不能对 MERGE 表执行插入操作
    • 对 MERGE 表进行 DROP 操作,但是这个操作只是删除 MERGE 表的定义,对内部的表是没有任何影响的
CREATE TABLE order_1(
)ENGINE = MyISAM DEFAULT CHARSET=utf8;CREATE TABLE order_2(
)ENGINE = MyISAM DEFAULT CHARSET=utf8;CREATE TABLE order_all(-- 结构与MyISAM表相同
)ENGINE = MERGE UNION = (order_1,order_2) INSERT_METHOD=LAST DEFAULT CHARSET=utf8;

特性MyISAMInnoDBMEMORY
存储限制有(平台对文件系统大小的限制)64TB有(平台的内存限制)
事务安全不支持支持不支持
锁机制表锁表锁/行锁表锁
B+Tree 索引支持支持支持
哈希索引不支持不支持支持
全文索引支持支持不支持
集群索引不支持支持不支持
数据索引不支持支持支持
数据缓存不支持支持N/A
索引缓存支持支持N/A
数据可压缩支持不支持不支持
空间使用N/A
内存使用中等
批量插入速度
外键不支持支持不支持

只读场景 MyISAM 比 InnoDB 更快:

  • 底层存储结构有差别,MyISAM 是非聚簇索引,叶子节点保存的是数据的具体地址,不用回表查询
  • InnoDB 每次查询需要维护 MVCC 版本状态,保证并发状态下的读写冲突问题

引擎选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。

  • InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
  • MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

引擎操作

  • 查询数据库支持的存储引擎
SHOW ENGINES;
SHOW VARIABLES LIKE '%storage_engine%'; -- 查看Mysql数据库默认的存储引擎
  • 查询某个数据库中所有数据表的存储引擎SHOW TABLE STATUS FROM 数据库名称;
  • 查询某个数据库中某个数据表的存储引擎SHOW TABLE STATUS FROM 数据库名称 WHERE NAME = ‘数据表名称’;
  • 创建数据表,指定存储引擎
CREATE TABLE 表名(列名,数据类型,...
)ENGINE = 引擎名称;
  • 修改数据表的存储引擎ALTER TABLE 表名 ENGINE = 引擎名称;

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

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

相关文章

遍历二叉树

王有志,一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群:共同富裕的Java人 今天我们继续学习数据结构与算法的内容,主要是如何遍历一棵二叉树,那么我们直接开始吧。 创建二叉树 在数据结构:认识一棵树的最后…

合肥先进光源束测步进电机控制方案介绍

合肥先进光源束测步进电机及驱动器的选择 关于电机控制那些事 我工作中的tips总结--电机控制篇 上面提到现在业界常用的ethercat驱动器和电机,和以前的脉冲方式相比,接线就规整多了,驱动电流几安培的电机一根网线就可以了,并且这…

2024年,给程序员的六点建议

作为程序员,持续进步和发展是至关重要的。除了技术能力的提升,还有一些关键的行为和思维方式可以帮助工程师在职业生涯中取得更大的成功。本文将提供六个重要的建议,这些建议将帮助程序员在职业生涯中迈出成功的步伐。 走出舒适区 走出舒适区…

代码随想录算法训练营29期Day25|LeetCode 216,17

文档讲解:组合总和III 电话号码的字母组合 216.组合总和III 题目链接:https://leetcode.cn/problems/combination-sum-iii/description/ 思路: 本题目与LeetCode 77差不多,都是要找出k个数来使其等于指定的数字n。不过这次数字…

人工智能在游戏中的角色:从玩家到创造者

目录 AI的发展历程Python中的AI游戏玩家实现未来的展望结论 人工智能(AI)已经从简单的游戏对手发展到游戏设计和体验的创造者。在游戏领域,AI的应用不再局限于与人类玩家的对抗,而是扩展到游戏内容的生成、游戏测试、玩家体验的个…

详解Redisson

第1章:Redisson简介 大家好,我是小黑,咱们今天来聊聊Redisson,Redisson不只是简单地对Redis进行了封装,它还提供了一系列高级的分布式Java数据结构,像是分布式锁、原子长整型这种。 首先,Redi…

centos 安装rabbitmq集群

当然,我会提供一个更加详细的步骤指南,帮助你在三台 CentOS 服务器上搭建 RabbitMQ 集群。这些服务器的 IP 地址分别为 10.206.0.4、10.206.0.8 和 10.206.0.13。 步骤 1: 安装 Erlang RabbitMQ 需要 Erlang 运行环境。在每台服务器上执行以下步骤&…

AutoDL——终端训练神经网络模型(忽略本地问题)

前言: 本人之前分享过一篇文章:使用pycharm连接远程GPU训练神经网络模型(超详细!),其中详细介绍了如何利用pycharm连接AutoDL算力云平台租用的GPU服务器训练网络模型。但有些小伙伴可能会因为一些原因而导…

Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx (1)上传压缩包到目录 /usr/nginx里面 (2)解压文件 (3&#xff09…

数据结构概述

一、概述 是计算机的一门基础学科 研究数据在计算机中进行组织和存储,使我们可以高效的获取数据和修改数据 分类 线性结构:数组、队列、栈、链表、哈希表... 树型结构:二叉树、二分搜索树、AVL树、红黑树、堆、Tire、线段树、并查集... 图结构:邻接矩阵、邻接表 二、基本…

c++IO类库

c对IO流的操作必须使用特定的类对象进行操作。 上图就是c中相关IO操作的类封装, ios_base: 是最基本的类,存放IO流的基本信息 ios: ios类是ios_base的子类。是相应的IO流的基类 Istream,ostream: 这两个类都是ios的子类,分别是输…

基于YOLOv8的学生课堂行为检测,引入BRA注意力和Shape IoU改进提升检测能力

💡💡💡本文摘要:介绍了学生课堂行为检测,并使用YOLOv8进行训练模型,以及引入BRA注意力和最新的Shape IoU提升检测能力 1.SCB介绍 摘要:利用深度学习方法自动检测学生的课堂行为是分析学生课堂表…

protobuf-Java使用.md

protobuf 环境配置 1、安装编译器 下载地址 直接解压缩。 2、配置环境变量 环境变量Path 中增加安装目录的路径 3、检查是否配置成功 protoc Usage: protoc [OPTION] PROTO_FILES Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pa…

etcd安装

1、单节点部署 Install | etcd 1.1、安装 # centos7环境安装etcd # # 下载etcd wget https://github.com/etcd-io/etcd/releases/download/v3.5.11/etcd-v3.5.11-linux-amd64.tar.gz# 解压 tar -xf etcd-v3.5.11-linux-amd64.tar.gz# 进入 etcd-v3.5.11-linux-amd64目录 cd etc…

cmake-动态库和静态库及使用OpenCV第三方库

文章目录 静态库准备的文件CMakeLists文件使用静态库 动态库准备的文件CMakeLists文件使用动态库 使用OpenCV库 项目中会有单个源文件构建的多个可执行文件的可能。项目中有多个源文件,通常分布在不同子目录中。这种实践有助于项目的源代码结构,而且支持…

RPA与ChatGPT的融合:智能化流程的未来

RPA(Robotic Process Automation)是一种利用软件机器人模拟人类操作的技术,可以实现对各种业务流程的自动化执行。ChatGPT是一种基于深度学习的自然语言生成模型,可以根据给定的上下文生成流畅、连贯、有逻辑的文本。RPA与ChatGPT…

【Oracle】如何给物化视图分区

文章目录 【Oracle】如何给物化视图分区给物化视图进行分区的例 【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 收集Oracle数据库内存相关的信息 【Oracle】ORA-32017和ORA-00384错误处理 【Oracle】设置…

《WebKit 技术内幕》之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中,WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下:首先是字节流,经过解码之…

某马头条——day07

APP端搜索 搭建ES环境 docker pull elasticsearch:7.4.0 docker run -id --name elasticsearch -d --restartalways -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.typesingle-node" elasticsear…

Qt 鼠标进入离开事件

文章目录 1. 通过自定义控件实现1.1 添加自定义控件类LabelX 2. 通过事件过滤器实现2.1 添加一个QLabel2.2 为QLabel安装事件过滤器2.3 重写eventFilter 函数 QEvent::Enter ​ 鼠标进入事件,当鼠标进入到窗口/控件内部时,触发该事件,它对应的…