当前位置: 首页 > article >正文

超详细的MySQL存储引擎讲解,学习MySQL这些知识你必须要会!

存储引擎

MySQL 是一个广泛使用的关系型数据库管理系统,它支持多种存储引擎,每种引擎都有自己独特的特点和适用场景。这些存储引擎决定了数据如何在数据库中存储、检索和管理的机制。

在这里插入图片描述

默认引擎

首先我们要知道,在创建表的时候,如果没有执行该表的存储引擎的话,那么默认采用那种存储引擎的方式呢?
其实是跟MySQL版本有关

  • MySQL 5.5及之后的版本中,默认的存储引擎是InnoDB。InnoDB是一个事务型存储引擎,它提供了事务安全表(ACID兼容)、行级锁定和外键等特性。这使得InnoDB成为许多需要高性能和事务支持的应用场景的首选。
  • MySQL 5.5之前的版本中,默认的存储引擎是MyISAM。MyISAM是一个非事务型存储引擎,它提供了较高的插入和查询速度,但不支持事务和外键。因此,它更适合于那些以读取操作为主、不需要事务支持的应用场景。

InnoDB

特点:

  • 事务支持:InnoDB 支持 ACID(原子性、一致性、隔离性、持久性)事务特性,是 MySQL 默认的存储引擎。
  • 行级锁定:InnoDB 使用行级锁定,可以高并发地处理事务,适用于写操作频繁的应用。
  • 外键支持:InnoDB 支持外键约束,可以维护数据的完整性。
  • 崩溃恢复:InnoDB 有强大的崩溃恢复能力,能够在系统崩溃后自动恢复数据。
  • MVCC(多版本并发控制):InnoDB 通过 MVCC 实现高效的并发控制。

查看当前默认引擎

要查看当前MySQL服务器支持的存储引擎以及默认的存储引擎,可以使用以下SQL语句:

SHOW ENGINES;

可以看到InnoDB引擎是DEFAULT(默认),所以InnoDB引擎是当前数据库的默认存储引擎
在这里插入图片描述

EngineSupportCommentTransactionsXASavepoints
FEDERATEDNOFederated MySQL storage engineNULLNULLNULL
MEMORYYESHash based, stored in memory, useful for temporary tablesNONONO
InnoDBDEFAULTSupports transactions, row-level locking, and foreign keysYESYESYES
PERFORMANCE_SCHEMAYESPerformance SchemaNONONO
MyISAMYESMyISAM storage engineNONONO
CSTORENOSupports column storeNULLNULLNULL
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
BLACKHOLEYES/dev/null storage engine (anything you write to it disappears)NONONO
CSVYESCSV storage engineNONONO
ARCHIVEYESArchive storage engineNONONO

设置存储引擎

在查询结果中,DEFAULT关键字标识的引擎就是当前默认的存储引擎。此外,当在创建表时,可以通过ENGINE子句来明确指定表的存储引擎,

CREATE TABLE my_table (  
    id INT PRIMARY KEY,  
    name VARCHAR(255) NOT NULL  
) ENGINE=InnoDB;

在上面的代码中,我们明确指定了表的存储引擎为InnoDB。如果没有指定ENGINE子句,那么将使用MySQL服务器当前的默认存储引擎。

适用场景:

  • 需要事务支持的应用。
  • 写操作频繁,并发要求高的应用。
  • 数据完整性要求高的应用。

MyISAM

特点:

  • 不支持事务:MyISAM 不支持事务和外键。
  • 表级锁定:MyISAM 使用表级锁定,在写操作时锁定整个表,不适合高并发写操作。
  • 全文索引:MyISAM 支持全文索引,适合全文搜索。
  • 读取速度快:MyISAM 在读取速度方面通常比 InnoDB 快,特别是读取大量数据时。

适用场景:

  • 读操作频繁,写操作较少的应用。
  • 不需要事务支持的应用。
  • 需要全文搜索的应用。

Memory

特点:

  • 存储在内存中:Memory 存储引擎将数据存储在内存中,因此读写速度非常快。
  • 不支持持久化:由于数据存储在内存中,服务器重启后数据会丢失,适用于临时数据存储。
  • 表级锁定:Memory 引擎使用表级锁定。
  • 哈希索引和 B 树索引:Memory 引擎支持哈希索引和 B 树索引,默认使用哈希索引。

适用场景:

  • 临时数据存储。
  • 需要快速访问的数据。
  • 不需要持久化存储的数据。

NDB (Clustered)

特点:

  • 分布式存储:NDB 是 MySQL Cluster 的存储引擎,支持分布式存储和复制。
  • 高可用性和可扩展性:NDB 提供高可用性和可扩展性,适用于大型分布式系统。
  • 内存存储:NDB 也将数据存储在内存中,因此读写速度很快。

适用场景:

  • 需要高可用性和可扩展性的分布式系统。
  • 高并发读写操作。
  • 实时数据处理。

Archive

特点:

  • 压缩存储:Archive 存储引擎提供压缩存储,适用于存储历史数据或日志数据。
  • 只读:Archive 引擎是只读的,不支持更新和删除操作。
  • 高效的插入操作:Archive 引擎在插入操作方面非常高效。

适用场景:

  • 历史数据或日志数据的存储。
  • 需要压缩存储以节省空间的应用。

CSV

特点:

  • 文本存储:CSV 存储引擎将数据存储在逗号分隔值的文本文件中,易于导入导出。
  • 可读性强:CSV 文件是文本格式,易于阅读和编辑。
  • 不支持索引:CSV 引擎不支持索引,查询性能较差。

适用场景:

  • 数据导入导出。
  • 需要将数据存储在可读性强、易编辑的文件中的场景。

Federated

特点:

  • 分布式访问:Federated 存储引擎允许 MySQL 服务器访问远程 MySQL 服务器上的表,类似于分布式数据库。
  • 无缝集成:Federated 引擎使得访问远程表就像访问本地表一样简单。

适用场景:

  • 分布式数据库系统。
  • 需要跨多个 MySQL 服务器访问数据的场景。

TokuDB

特点:

  • 压缩存储:TokuDB 提供高效的压缩存储,节省存储空间。
  • 高并发写入:TokuDB 支持高并发写入,适合写操作频繁的应用。
  • 事务支持:TokuDB 支持事务特性。

适用场景:

  • 需要高效压缩存储的应用。
  • 写操作频繁,并发要求高的应用。

选择存储引擎的建议

  1. 根据具体的应用场景选择最合适的存储引擎。
  2. 如果需要事务支持和数据完整性,选择 InnoDB。
  3. 如果读操作频繁且不需要事务支持,可以选择 MyISAM。
  4. 临时数据存储和快速访问可以选择 Memory。
  5. 需要分布式存储和高可用性可以选择 NDB。
  6. 历史数据和日志存储可以选择 Archive。

http://www.kler.cn/a/374528.html

相关文章:

  • axios源码分析之请求adapter
  • 游戏启动失败:8种修复xinput1_3.dll错误的几种方法教程,轻松解决xinput1_3.dll错误
  • java设计模式之创建者模式(5种)
  • TDengine 数据订阅 vs. InfluxDB 数据订阅:谁更胜一筹?
  • 正则表达式---火星文计算
  • 用 GitCode 搭建免费图床:极简教程
  • kan代码阅读
  • 账户和组管理
  • 若依框架部署到服务器刷新或者是退出登录出现404
  • Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入
  • PVE修改Ubuntu虚拟机的硬盘大小
  • nginx 根路径同时代理 http ws sse 三种请求
  • WebGL 快速入门构建你的第一个 3D 应用
  • 在浏览器中运行 Puppeteer:解锁新能力
  • USB接口类型及引脚信号详解
  • java 实现对 word 文档中占位符进行替换
  • Spring学习笔记_13——@Autowired
  • 内网穿透技术选型PPTP(点对点隧道协议)和 FRP(Fast Reverse Proxy)
  • 手机功耗异常大数据看板建设
  • IMU技术引领骑行新体验
  • linux中网口测试
  • JVM—类加载器、双亲委派机制
  • git入门教程6:git基本版本控制
  • 中英文如何快速切换?小达人盘点10款翻译工具给你
  • 芯片技术创新,GPU 服务器厂家聚焦服务器性能新巅峰
  • Nuxt.js 应用中的 components:extend 事件钩子详解