MySQL有哪些常见的存储引擎?

news2024/11/20 1:48:10

主要存储引擎

    • 主要的三个存储引擎
      • MyISAM
      • Memory
      • InnoDB
    • 那存储引擎应该怎么选择?
    • InnoDB 和 MylSAM 主要有什么区别?

MySQL有9种存储引擎,不同的引擎,适合不同的场景,我们最常用的,可能就是InnoDB,应该是从5.5开始,就成为了MySQL的默认存储引擎。

主要的三个存储引擎

在这里插入图片描述
主要存储引擎以及功能如下:

功能MylSAMMEMORYInnoDB
存储限制256TBRAM64TB
支持事务NoNoYes
支持全文索引YesNoYes
支持树索引YesYesYes
支持哈希索引NoYesYes
支持数据缓存NoN/AYes
支持外键NoNoYes

MySQL5.5 之前,默认存储引擎是 MylSAM,5.5 之后变成了 InnoDB。

InnoDB 支持的哈希索引是自适应的,InnoDB 会根据表的使用情况自动为表生成哈希索引,不能人为干预是否在一张表中生成哈希索引。

MySQL 5.6 开始 InnoDB 支持全文索引。

MyISAM

MyISAM基于ISAM存储引擎,并对其进行扩展。
MyISAM拥有较高的插入、查询速度,但没有事务。使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件:

(1) frm文件:存储表的定义数据。

(2) MYD文件:存放表具体记录的数据。

(3) MYI文件:存储索引。

frm和MYI可以存放在不同的目录下。MYI文件用来存储索引,但仅保存记录所在页的指针,索引的结构是B+树结构。下面这张图就是MYI文件保存的机制:

在这里插入图片描述

从这张图可以发现,这个存储引擎通过MYI的B+树结构来查找记录页,再根据记录页查找记录。并且支持全文索引、B树索引和数据压缩。

支持数据的类型也有三种:

(1)静态固定长度表

这种方式的优点在于存储速度非常快,容易发生缓存,而且表发生损坏后也容易修复。缺点是占空间。这也是默认的存储格式。

(2)动态可变长表

优点是节省空间,但是一旦出错恢复起来比较麻烦。

(3)压缩表

上面说到支持数据压缩,说明肯定也支持这个格式。在数据文件发生错误时候,可以使用check table工具来检查,而且还可以使用repair table工具来恢复。

有一个重要的特点那就是不支持事务,但是这也意味着他的存储速度更快,如果你的读写操作允许有错误数据的话,只是追求速度,可以选择这个存储引擎。

Memory

MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。每一个表实际上和一个磁盘文件关联,文件是frm。

  • 支持的数据类型有限制,例如,不支持TEXT和BLOB类型,对于字符串类型的数据,只支持固定长度的行,VARCHAR会被自动存储为CHAR类型。

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

  • 由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失。

  • 查询的时候,如果有用到临时表,而且临时表中有BLOB,TEXT类型的字段,那么这个临时表就会转化为MyISAM类型的表,性能会急剧降低。

  • 默认使用hash索引。

  • 如果一个内部表很大,会转化为磁盘表。

  • MEMORY存储引擎支持HASH和BTREE索引。

  • 可以在一个MEMORY表中有非唯一键值。

  • MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引。

  • 当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)。

InnoDB

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。

InnoDB主要特性:

  • 支持事务。默认的事务隔离级别为可重复读,通过MVCC(并发版本控制)来实现的。
  • InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
  • InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。
  • 可以通过自动增长列,方法是auto_increment。
  • 使用的锁粒度为行级锁,可以支持更高的并发。
  • 支持外键约束,外键约束其实降低了表的查询速度,但是增加了表之间的耦合度。
  • 在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度。
  • 对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上。

InnoDB的存储表和索引也有下面两种形式,

(1) 使用共享表空间存储:所有的表和索引存放在同一个表空间中。
(2) 使用多表空间存储:表结构放在frm文件,数据和索引放在IBD文件中。分区表的每个分区对应单独的IBD文件,使用分区表的好处在于提升查询效率。

对于InnoDB来说,最大的特点在于支持事务,但这以损失效率来换取和保障。

那存储引擎应该怎么选择?

大致上可以这么选择:

  • 大多数情况下,使用默认的 InnoDB 就够了。如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 就是比较靠前的选择了。
  • 如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
  • 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。

使用哪一种引擎可以根据需要灵活选择,因为存储引擎是基于表的,所以一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎将会提高整个数据库的性能。

InnoDB 和 MylSAM 主要有什么区别?

  1. 存储结构:每个 MyISAM 在磁盘上存储成三个文件;InnoDB 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

  2. 事务支持:MyISAM 不提供事务支持;InnoDB 提供事务支持事务,具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全特性。

  3. 最小锁粒度:MyISAM 只支持表级锁,更新时会锁住整张表,导致其它查询和更新都会被阻塞 InnoDB 支持行级锁。

  4. 索引类型:MyISAM 的索引为非聚簇索引,数据结构是 B 树;InnoDB 的索引是聚簇索引,数据结构是 B+树。

  5. 主键必需:MyISAM 允许没有任何索引和主键的表存在;InnoDB 如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

  6. 表的具体行数:MyISAM 保存了表的总行数,如果 select count() from table;会直接取出出该值; InnoDB 没有保存表的总行数,如果使用 select count() from table;就会遍历整个表;但是在加了 wehre 条件后,MyISAM 和 InnoDB 处理的方式都一样。

  7. 外键支持:MyISAM 不支持外键;InnoDB 支持外键。

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

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

相关文章

向前兼容与向后兼容

2012年3月发布了Go 1.0,随着 Go 第一个版本发布的还有一份兼容性说明文档。该文档说明,Go 的未来版本会确保向后兼容性,不会破坏现有程序。 即用10年前Go 1.0写的代码,用10年后的Go 1.18版本,依然可以正常运行。即较高版本的程序能…

泰凌微科创板成功上市

2023年8月25日,泰凌微电子(上海)股份有限公司(股票简称“泰凌微”,股票代码为“688591.SH”)成功于上海证券交易所科创板挂牌上市。自泰凌微成立以来,便一直致力于研发具有自主知识产权、国际一…

Matter 设备配网流程 ---- 配网材料和 SPAKE2P 机制

Matter 设备配网流程 ---- 配网材料和 SPAKE2P 机制 1. Matter 配网材料 Matter 配网(commissioning)使用 SPAKE2P 协议完成 PASE,进而验证 DAC(Device Attestation Credentials),派发 NOC,然…

ubuntu入门01——windows上直接部署linux(WSL)

win10安装参考如下教程: 旧版 WSL 的手动安装步骤 | Microsoft Learn 说明:该文档是我按如上教程安装使用Ubuntu写的回顾,家人们参考官方教程更妙。 1.启用适用于Linux的wundows子系统 2.启用虚拟机功能 dism.exe /online /enable-feat…

Java IO操作——BufferedReader

BufferReader Java IO操作——BufferedReader(缓冲区读取内容,避免中文乱码) 要点: 掌握BufferedReader类的使用 掌握键盘输入的基本形式 Buffer:表示缓冲区的。之前的StringBuffer,缓冲区中的内容可以更改,可以提高…

递归算法学习——子集

目录 一,题目解析 二,例子 三,题目接口 四,解题思路以及代码 1.完全深度搜索 2.广度搜索加上深度优先搜索 五,相似题 1.题目 2.题目接口 3.解题代码 一,题目解析 给你一个整数数组 nums &#xff0c…

合宙Air724UG LuatOS-Air LVGL API控件--复选框 (Checkbox)

复选框 (Checkbox) 复选框主要是让用户进行一些内容选择,或者同意用户协议。 示例代码 – 复选框回调函数 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then print(“State”, lvgl.checkbox_is_checked(obj)) end end – 创建复选框…

python学习1之安装

前言 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,我们的教程将以最新的Python 3.9版本为基础。 1、下载 官网地址 https://www.python.org/downloads/ 2、安装 点击…

并发 04(Callable,CountDownLatch)详细讲解

并发 Callable 1 可以返回值 2可以抛出异常 泛型指的是返回值的类型 public class Send {public static void main(String[] args) {//怎么启动Callable//new Thread().start();Aaa threadnew Aaa();FutureTask futureTasknew FutureTask(thread);new Thread(futureTask,&qu…

这款自研RedCap网关终端,获评优秀!

近日,由通信世界全媒体主办的“5GRedCap技术与物联网应用创新研讨会”在北京举办。作为中国电信5GInside合作计划的重要成果,天翼物联自主研发的“RedCap网关终端CTW-GW-01”产品获“5GRedCap优秀产品和解决方案”。此次会议,天翼物联行业总监…

pyqt5 QuickStart

在使用pyqt5之前,建议下载一个Anaconda环境,这样下载python包更方便,本篇文章是建立在已经安装好Anaconda的情况下使用的。IDE就是标准的PyCharm了。 一、pyqt包的安装 python终端执行下面两个安装命令: pip install PyQt5 pip …

HTTP:http上传文件的原理及java处理方法的介绍

为了说明原理&#xff0c;以下提供一个可以上传多个文件的例子&#xff0c;html页面代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>http upload file</title> </head> <body>…

LeetCode56.合并区间

这道题我想了一会儿&#xff0c;实在想不到比较好的算法&#xff0c;只能硬着头皮写了&#xff0c;然后不断的debug&#xff0c;经过我不懈的努力&#xff0c;最后还是AC&#xff0c;不过效率确实低。 我就是按照最直接的方法来&#xff0c;先把intervals数组按照第一个数star…

gRPC + Spring Boot 编程教程 - piot

在本文中&#xff0c;您将学习如何实现通过 gRPC 通信的 Spring Boot 应用程序。gRPC 是一个现代开源远程过程调用 (RPC) 框架&#xff0c;可以在任何环境中运行。默认情况下&#xff0c;它使用 Google 的 Protocol Buffer 来序列化和反序列化结构化数据。当然&#xff0c;我们…

supervisorctl(-jar)启动配置设置NACOS不同命名空间

背景 由于需要在上海服务器上面配置B测试环境&#xff0c;原本上面已有A测试环境&#xff0c;固需要将两套权限系统分开 可以使用不同的命名空间来隔离启动服务 注&#xff1a;本文章均不涉及公司机密 1、新建命名空间 命名空间默认会有一个public&#xff0c;并且不能删除&a…

「Linux」使用VS Code远程连接Linux

一、VS Code简介 1.VS Code是什么&#xff1f; Visual Studio Code&#xff08;简称“VS Code”&#xff09;是微软公司的一个运行可以于 Mac OS、Windows 和 Linux之上的源代码编辑器。简单地说VS Code是一个编辑器&#xff0c;用来写代码。是一个基于插件的软件。 2.使用VSCo…

C++中的虚函数

一、虚函数 &#xff08;类继承中的一种函数&#xff09; 概念 概念 被virtual修饰的函数叫做虚函数。 为什么说虚函数是类继承中的一种函数呢&#xff1f; 因为虚函数的作用确实主要是在类的继承中体现的&#xff08;即派生类和基类&#xff09; 虚函数的作用就是当基类和派生…

Verilog基础:巴科斯范式(BNF)

相关阅读 Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 由于Verilog HDL标准中对语法的描述使用了Backus Naur Form&#xff08;BNF&#xff09;。本文将对其中的约定进行描述。 小写单词&#xff0c;其中一些包含…

安防监控/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…

【记录】USSOCOM Urban3D 数据集读取与处理

Urban3D数据集内容简介 Urban3D数据集图像为正摄RGB影像&#xff0c;分辨率为50cm。 从SpaceNet上使用aws下载数据&#xff0c;文件夹结构为&#xff1a; |- 01-Provisional_Train|- GT|- GT中包含GTC&#xff0c;GTI&#xff0c;GTL.tif文件&#xff0c;GTL为ground truth b…