【MySQL 系列】MySQL 引擎篇

存储引擎是 MySQL 的组件,用于处理不同表类型的 SQL 操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。


文章目录

        • 1、MySQL 引擎介绍
          • 1.1、MySQL 引擎介绍
          • 1.2、常见引擎及其区别和特点
          • 1.3、常用引擎相关命令
            • 1.3.1、查询存储引擎
            • 1.3.2、设置存储引擎
        • 2、InnoDB 与 MyISAM 存储引擎之间的比较
          • 2.1、事务的支持
          • 2.2、索引与主键处理
          • 2.3、外键
          • 2.4、存储文件的不同
          • 2.5、select count(\*)
          • 2.6、锁的级别


1、MySQL 引擎介绍
1.1、MySQL 引擎介绍

存储引擎是 MySQL 的组件,用于处理不同表类型的 SQL 操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。

MySQL引擎是数据库的核心组件之一,决定了数据库的性能、可靠性和功能特性。

MySQL引擎的作用包括但不限于以下几个方面:

  1. 存储数据:MySQL 引擎负责将数据存储在物理存储介质上,包括硬盘或固态硬盘等。它将数据组织成表、索引等结构,并提供对这些数据的高效访问方式。
  2. 管理数据:MySQL 引擎管理数据的增删改查操作,包括插入新数据、更新已有数据、删除数据以及查询数据等操作。它负责确保数据的完整性、一致性和持久性。
  3. 提供事务支持:MySQL 引擎支持事务,可以确保一组操作要么全部成功执行,要么全部失败回滚,保证数据的一致性和可靠性。
  4. 提供并发控制:MySQL 引擎提供并发控制机制,确保多个用户可以同时访问数据库而不会相互干扰,保证数据的正确性和可靠性。
  5. 优化查询性能:MySQL 引擎负责优化查询语句,提高查询性能,包括选择合适的索引、执行查询计划优化等。
1.2、常见引擎及其区别和特点

MySQL支持多种不同类型的存储引擎,每种引擎都有其自身的特点和适用场景。以下是 MySQL 支持的一些常见引擎及其区别和特点:

① InnoDB:

  • InnoDB 是 MySQL 默认的事务安全引擎,提供了对事务的支持,包括 ACID(原子性、一致性、隔离性、持久性)特性。
  • 支持行级锁定和外键约束,适合于需要高并发和数据完整性的应用场景。
  • InnoDB 引擎使用聚簇索引,将数据和索引存储在同一个B树结构中,提高了查询性能。

② MyISAM:

  • MyISAM 是 MySQL 的另一种常见引擎,不支持事务和行级锁定。
  • MyISAM 引擎适合于读操作频繁、写操作较少的应用场景,如数据仓库、日志分析等。
  • 支持全文索引和压缩表格,对于特定类型的查询有一定的优势。

③ MEMORY(也称为HEAP):

  • MEMORY 引擎将表格存储在内存中,适合于临时表格或者数据存储量较小的场景。
  • 内存引擎不支持持久化,数据库重启时数据会丢失,因此不适合用于持久性数据存储。
  • 内存引擎的查询速度非常快,但受限于内存大小。

④ NDB Cluster:

  • NDB Cluster 引擎是 MySQL 的集群存储引擎,适用于分布式环境和高可用性需求。
  • NDB Cluster 提供了分布式存储和事务支持,支持自动分区和数据复制,保证了数据库的可扩展性和可靠性。

⑤ 其他引擎:

  • 还有其他一些不太常见的 MySQL 引擎,如 ARCHIVE、CSV、BLACKHOLE 等,它们各自有特定的用途和特点。

这些引擎之间的主要区别和特点包括:

  • 事务支持:InnoDB 和 NDB Cluster 支持事务,而 MyISAM 和 MEMORY等 引擎不支持。
  • 锁定机制:InnoDB 支持行级锁定,而 MyISAM 通常使用表级锁定。
  • 存储引擎特性:不同引擎支持的特性不同,如全文索引、压缩表格、分布式存储等。
  • 性能和可靠性:不同引擎在性能、可靠性和适用场景上有所差异,根据具体需求选择合适的引擎。

在选择 MySQL 引擎时,需要根据应用场景和需求综合考虑各种因素,包括事务需求、性能要求、可靠性需求等,以选择最适合的引擎。

1.3、常用引擎相关命令
1.3.1、查询存储引擎
-- 查看支持的存储引擎
SHOW ENGINES
-- 查看默认存储引擎
SHOW VARIABLES LIKE '%storage_engine%'
--查看具体某一个表所使用的存储引擎,这个默认存储引擎被修改了!
show create table tablename
--准确查看某个数据库中的某一表所使用的存储引擎
show table status like 'tablename'
show table status from database where name="tablename"
1.3.2、设置存储引擎
-- 建表时指定存储引擎。默认的就是INNODB,不需要设置
CREATE TABLE t1 (i INT) ENGINE = INNODB;
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
-- 修改存储引擎
ALTER TABLE t ENGINE = InnoDB;
-- 修改默认存储引擎,也可以在配置文件my.cnf中修改默认引擎
SET default_storage_engine=NDBCLUSTER; 

2、InnoDB 与 MyISAM 存储引擎之间的比较
2.1、事务的支持

InnoDB 支持 ACID 的事务处理,MyISAM 并不支持事务,这里需要注意,如果我们在程序需要进行事务处理,所有的数据都要使用 Innodb 存储引擎,如果中间有 MyISAM 存储引擎的数据表,如果进行事务回滚,MyISAM 并不会回滚到之前的状态,因此 MyISAM 不支持事务。

2.2、索引与主键处理

InnoDB 存储引擎使用的是聚集索引,InnoDB 主键的叶子节点是该行的数据,而其他索引则指向主键,而 MyISAM 存储引擎使用的是非聚集索引,主键与其他索引的叶子节点都存储了指向数据的指针。

另外一个是 MyISAM 数据表允许没有主键和其他索引,而 InnoDB 数据表如果没有主键的话,而会生成一个用户不可见6字节的主键。

2.3、外键

MyISAM 不支持外键,而 Innodb 则支持建立数据表之间的外键关联。

2.4、存储文件的不同

Innodb 存储文件有 frm、ibd,而 MyISAM 是 frm、MYD、MYI,Innodb 存储文件中 frm 是数据表结构定义文件,ibd 是数据文件,MyISAM 中 frm 是数据表结构定义文件,MYD 是数据的文件,MYI 则是存储索引的文件。

2.5、select count(*)

使用 MyISAM 存储引擎的数据表会记录一个数据表的总行数,所以对使用 MyISAM 存储引擎的数据表进行 select count(*),可以很快得到一个数据表的总行数,而对于 InnoDB 存储引擎的数据表,想要查询总行数需要进行全表扫描才能得到。

2.6、锁的级别

InnoDB 支持行级锁,而 MyISAM 只支持表级锁,因此 InnoDB 更能支持高并发。

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

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

相关文章

Editor.md-编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda,恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件,将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…

深入理解FTP协议:文件传输的桥梁

深入理解FTP协议:文件传输的桥梁 在数字化时代,文件传输协议(FTP)是互联网上进行文件交换的重要手段。FTP允许用户在不同的计算机之间传输文件,无论是上传还是下载,都提供了一种稳定且高效的方式。本文将深…

三维铁木辛柯梁Matlab有限元编程 | 弹簧支座 | 弹性支撑单元| Matlab源码 | 理论文本

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

macOS 安装使用 python 虚拟机

在macOS上安装Conda的步骤相对简单。Conda通常通过Anaconda或Miniconda进行安装,Anaconda是一个包含了Conda、Python和许多科学包及其依赖的发行版,而Miniconda则是一个更轻量级的版本,只包含Conda和Python。以下是在macOS上安装Anaconda的步…

Spring Boot启动时执行初始化操作的几种方式

场景 项目中,经常需要在启动过程中初始化一些数据,如从数据库读取一些配置初始化,或从数据库读取一些热点数据到redis进行初始化缓存。 方式一:实现CommandLineRunner 接口重写run方法逻辑 CommandLineRunner是Spring提供的接口&#xff0…

【C++】stack、queue模拟实现+仿函数

stack、queue模拟实现仿函数 stack定义stack模拟实现 queue定义queue模拟实现 priority_queue定义priority_queue模拟实现 deque定义底层分析 容器适配器定义种类 仿函数控制类里面数据的比较逻辑回调函数仿函数两者区别 铁汁们,今天给大家分享一篇stack、queue模拟…

数据库学习案例20240311 -mysql xtrabackup 备份与恢复

下载使用 Software Downloads - Percona 下载需要的依赖包 yum install perl-DBI -y yum install perl-DBD-MySQL -y yum install perl-Time-HiRes -y yum install perl-IO-Socket-SSL -y yum install perl-TermReadKey.x86_64 -y 下载安装配置完环境变量,然后做…

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动

移动端使用 echarts中 滚动条 dataZoom 改造为内容区域可以左右滚动 直接上图 : 主要是下面这段代码: "dataZoom": [{"type": "inside","show": false,"xAxisIndex": [0],"zoomOnMouseWheel&…

Clickhouse 单机部署安装

前言 在大数据的时代背景下,数据的处理和分析能力成为企业竞争力的关键。ClickHouse,作为一款由俄国Yandex公司开发的分布式数据分析型数据库,凭借其卓越的性能和稳定性,赢得了业界的广泛关注。本文将介绍ClickHouse的基本概念、…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

回到街头 - 数字时尚嘉年华:Web3的时尚未来,4月香港兰桂坊盛大启幕

随着区块链技术的不断发展,Web3世界正在逐渐改变我们的生活方式。作为这一变革的重要推动者,Vertex Labs荣幸地宣布,将在香港举办一场前所未有的“回到街头-数字时尚嘉年华”。这不仅是一场时尚与科技的完美结合,更是全球顶级IP和…

Linux arrch64系统架构 py文件运行时的编码问题解决

问题: 因为要测试一些东西,所以必须有中文数据来做支撑,之前用的架构是x86,现在一个服务器的架构为arrch64,下列编码都挨个都进行声明,但是无法解决问题,总是报错 # -*- coding: gbk -*- # -*…

考研数学——高数:高斯公式

助记: 关于积分时什么时候可以将变量整体代入积分式的问题:在积分过程中,如果某一整体恒为常量,则可以直接替换为定值,常见于对线或面的积分。 而在这题,用高斯公式之前是面积分,如果有这个整体出现的话是…

在C#中使用NModbus4通信库执行【读】操作

在工业自动化和控制系统中,Modbus协议是一种广泛使用的通信协议。它是一种基于主从结构的串行通信协议,简单、可靠且易于实现。在C#中,可以使用NModbus4库来执行Modbus通信。本文将详细介绍如何使用NModbus4库在C#中执行Modbus读操作。 1. N…

掌握Go语言:深入理解Go语言数组,基本原理与示例解析(15)

理解数组是理解编程语言中基本数据结构的重要一步。在Go语言中,数组是具有固定长度且由相同数据类型的元素组成的有序集合。下面我们将更详细地解释Go语言数组的各个方面。 1. 声明数组 在Go语言中,声明数组需要指定数组的长度和元素类型。语法如下&am…

党费收缴管理系统(十八)关于支付total和payer_total差异的情况处理

在前面我们将支付回调通知解密获取出来的数据 ,amount中有payer_total 和total两个值,正常情况下,这两个值应该是保持一致的。如果这两个值不一样,那么多半是党员缴纳过程使用了支付优惠券。 "amount":{"payer_t…

什么是VPS?如何使用VPS?

什么是VPS?VPS有什么用? VPS是Virtual Private Server的缩写,中文则为虚拟专用服务器,VPS是利用虚拟服务器软件在一台物理服务器上创建多个相互隔离的小服务器,是托管在机房物理服务器上的虚拟机。每个VPS服务器都可分…

Figure与OpenAI 联手推出新机器人;荣耀首款「AI PC」即将发布

▶ Figure 与 OpenAI 联手推出新机器人 AI 机器人公司 Figure 发布了他们与 OpenAI 的合作成果,将 OpenAI 的大模型运用在其机器人 Figure 01 上。 据介绍,OpenAI 大模型加持的 Figure 01 机器人现在可以与人全面对话。 OpenAI 模型为机器人提供了高级…

C# Onnx C2PNet 图像去雾 室内场景

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx C2PNet 图像去雾 室内场景 介绍 github地址:GitHub - YuZheng9/C2PNet: [CVPR 2023] Curricular Contrastive Regularization for Physics-aware Single Image Dehazing [CVPR 2023] Curricular Contrasti…