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

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述

MySQL 提供了多种存储引擎,每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍,包括它们的底层工作原理、优缺点,以及为什么 MySQL 默认选择某种引擎。

1. InnoDB

底层工作原理
  • 事务支持:InnoDB 支持 ACID 特性(原子性、一致性、隔离性、持久性),并实现了行级锁定,适合高并发的事务处理。
  • 存储格式:InnoDB 使用聚簇索引(Clustered Index)组织数据,数据按主键顺序存储在磁盘中,表的主键就是数据的物理存储顺序。
  • 崩溃恢复:InnoDB 引擎通过日志文件(redo log)实现崩溃恢复,在系统崩溃时,可以通过日志文件恢复数据。
  • 外键约束:InnoDB 支持外键约束,确保数据的完整性。
优点
  • 支持事务(ACID),保证数据一致性。
  • 支持外键,增强数据的完整性。
  • 行级锁定,可以提供更高的并发性能。
  • 自动崩溃恢复,保证数据的持久性和安全性。
  • 数据插入时,自动维护索引。
缺点
  • 比 MyISAM 慢,尤其在只读查询中,写操作更多时性能上可能较差。
  • 占用内存较多,尤其是在有很多索引的情况下。
  • 对于一些简单的读写操作,它可能并不如 MyISAM 高效。
适用场景
  • 适合需要事务支持、数据一致性和高并发的应用场景,如电商系统、银行系统、金融系统等。
为什么默认选择

MySQL 默认选择 InnoDB 引擎,因为它提供了全面的事务支持,保障数据一致性,并且在多线程环境下能够提供较好的并发性能。它适用于大多数现代应用程序,尤其是那些要求数据安全和可靠性的应用。

2. MyISAM

底层工作原理
  • 不支持事务:MyISAM 不支持事务处理,所有操作都是立即生效的,无法回滚。
  • 表级锁定:MyISAM 使用表级锁定,即在操作表时,整个表会被锁住,这会影响并发性能。
  • 存储格式:MyISAM 采用非聚簇索引,数据和索引分开存储,表的索引会单独存储在一个文件中(.MYI),数据则存储在另一个文件中(.MYD)。
  • 崩溃恢复:MyISAM 没有 InnoDB 那样的崩溃恢复机制,如果系统崩溃,数据可能会丢失。
优点
  • 查询速度快,特别是针对只读操作时,性能优越。
  • 占用内存较少,比 InnoDB 更适合大数据量的查询。
  • 对简单的 SELECT 查询效率较高。
缺点
  • 不支持事务处理,不保证数据一致性。
  • 只支持表级锁定,对于高并发的写操作性能较差。
  • 不支持外键。
  • 没有崩溃恢复机制,系统崩溃时数据容易丢失。
适用场景
  • 适用于读多写少的应用,如日志记录、统计报表等。

3. MEMORY(HEAP)

底层工作原理
  • 存储方式:MEMORY 存储引擎将数据存储在内存中,因此读写速度非常快。
  • 支持表级锁定:和 MyISAM 一样,MEMORY 使用表级锁定。
  • 不支持事务:MEMORY 不支持事务处理。
  • 数据持久性:当服务器关闭时,内存中的数据会丢失。
优点
  • 读写速度非常快,适合对性能有极高要求的应用。
  • 非常适合临时数据存储(例如,缓存)。
缺点
  • 数据不是持久化的,一旦服务器重启或崩溃,数据将丢失。
  • 仅能存储少量数据,受内存大小限制。
适用场景
  • 适用于需要快速访问、临时数据存储的场景,例如缓存表、临时结果集等。

4. CSV

底层工作原理
  • 存储方式:CSV 存储引擎将表数据存储为逗号分隔的文本文件(CSV 文件格式)。
  • 不支持索引:CSV 不支持索引,查询速度相对较慢。
  • 不支持事务和外键
优点
  • 数据文件可以方便地与其他程序(如 Excel)交换。
  • 适用于数据导出和导入场景。
缺点
  • 不支持索引,查询性能差。
  • 不支持事务,无法保证数据一致性。
  • 数据处理效率低,不适合大数据量场景。
适用场景
  • 适用于数据导入/导出、与其他应用的数据交换等场景。

5. NDB (Cluster)

底层工作原理
  • 存储方式:NDB 是 MySQL Cluster 中的存储引擎,数据存储在内存中,提供分布式的数据库服务。
  • 支持事务:NDB 支持事务,保证数据一致性。
  • 分布式存储:数据可以分布在多个节点上,实现高可用和高扩展性。
优点
  • 高可用性和高扩展性,适合分布式部署。
  • 支持事务,保证数据一致性。
  • 适合大规模、高并发的应用。
缺点
  • 配置和管理较为复杂。
  • 性能不如 InnoDB 和 MyISAM,在小规模应用场景下不适用。
适用场景
  • 适用于需要高可用性和高扩展性的分布式系统,如在线游戏、金融交易系统等。

总结

最常用的存储引擎是 InnoDB,因为它支持事务、行级锁定,并且能够提供较好的并发性能和数据一致性。MySQL 默认选择 InnoDB 引擎,主要是因为它适应了大多数现代应用的需求,特别是事务性应用的需求,比如电商、社交平台等。

为什么 MySQL 默认使用 InnoDB

  • 事务支持:InnoDB 提供了强大的事务支持,保障数据一致性和可靠性。
  • 高并发性能:行级锁定允许多个事务并发执行,而不会互相干扰。
  • 自动恢复:InnoDB 提供崩溃恢复机制,保证数据安全。
  • 外键支持:InnoDB 可以保持数据完整性,适用于复杂关系型数据库应用。

对于其他引擎(如 MyISAM),它们在特定场景下也有优势,但由于它们不支持事务或者性能上不如 InnoDB,因此不适合大多数现代应用,特别是需要数据一致性的场景。

相关文章:

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述 MySQL 提供了多种存储引擎,每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍,包括它们的底层工作原理、优缺点,以及为什么 MySQL 默认选择某种引擎。 1. InnoDB 底层工作原理: 事务支持&#…...

PHP 运算符

PHP 运算符 概述 PHP 是一种广泛使用的开源服务器端脚本语言,它具有丰富的运算符集,这些运算符是编写 PHP 程序的基础。运算符用于执行各种数学、逻辑和比较操作。本篇文章将详细介绍 PHP 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 算术运…...

Vue全流程--Vue3.0与Vue2.0响应式原理对比

Vue2中数据的响应式 需要使用Vue.set这么一个api,修改数据 需要使用Vue.delete这么一个api,删除数据 数据代理这个当面的理解可以看看我前面文章Vue全流程--数据代理的理解以及在Vue中的应用-CSDN博客 Vue3中数据的响应式 Vue3使用proxy这个api实现…...

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初,我们都会学习如何打印 hello world,在学习时我们知道了int main()是主函数,程序从main函数开始执行,这是流程控制的一部分内容。在主函数中我们想要实现一些功能,比如求各个…...

【大模型】本地部署DeepSeek-R1:8b大模型及搭建Open-WebUI交互页面

本地部署DeepSeek-R1:8b大模型 一、摘要及版本选择说明1.1 摘要1.2 版本选择 二、下载并安装Ollama三、运行DeepSeek-R1:8b大模型四、安装Open WebUI增强交互体验五、关闭Ollama开机自动启动六、DeepSeek大模型启停步骤 一、摘要及版本选择说明 1.1 摘要 作为一名对 AI 和生成…...

Python 调用 Stabilityai API在本地生成图像

Python 调用 Stabilityai API在本地生成图像 摘要功能 代码结构关键技术代码下载立即体验 摘要 本程序利用硅基流动目前的免费 stabilityai/stable-diffusion-2-1 模型API,生成图像并下载到本地,用户可以通过输入描述性提示词来获取相应的图像。使用Pyt…...

Python3中异常处理:try-finally语句的示例

一. 简介 前面一篇文章简单学习了 try-finally语句结构,执行过程、以及使用场景。文章如下: Python3中异常处理:try-finally语句-CSDN博客 本文写一些简单的示例来继续学习 try-finally语句的使用。 二. Python3中异常处理:try…...

Lua限流器的3种写法

学而不思则罔,思而不学则殆 引言 上篇文章讲解了Lua脚本,事务和Pipline之间的使用方式和性能差距,本篇文章将聚焦Lua脚本,我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...

基于 GEE 利用插值方法填补缺失影像

目录 1 完整代码 2 运行结果 利用GEE合成NDVI时,如果研究区较大,一个月的影像覆盖不了整个研究区,就会有缺失的地方,还有就是去云之后,有云量的地区变成空值。 所以今天来用一种插值的方法来填补缺失的影像&#xf…...

linux部署ollama+deepseek+dify

Ollama 下载源码 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz启动 export OLLAMA_HOST0.0.0.0:11434 ollama serve访问ip:11434看到即成功 Ollama is running 手动安装deepseek…...

在微服务中,如何使用feign在各个微服务中进行远程调用

在微服务中&#xff0c;如何使用feign在不同微服务中进行远程调用 在微服务中&#xff0c;如何使用feign在不同微服务中进行远程调用 步骤&#xff1a; 第一步&#xff1a; 引入feign依赖 <dependency><groupId>org.springframework.cloud</groupId><…...

Kafka中的KRaft算法

我们之前的Kafka值依赖于Zookeeper注册中心来启动的&#xff0c;往里面注册我们节点信息 Kafka是什么时候不依赖Zookeeper节点了 在Kafka2.8.0开始就可以不依赖Zookeeper了 可以用KRaft模式代替Zookeeper管理Kafka集群 KRaft Controller和KRaft Leader的关系 两者关系 Lea…...

vue3 -- 集成 amap(高德地图)

🍍效果 本文介绍了如何在 Vue 3 项目中集成高德地图(AMap),并使用 PoiPicker 实现地点搜索功能。 文章首先通过 AMapLoader 异步加载高德地图 API,并初始化 Map 实例。同时,借助 AMapUI 组件库引入 PoiPicker,绑定搜索输入框,实现地点选择功能。PoiPicker 监听用户的 …...

基于用户的协同过滤算法推荐

import numpy as np 计算用户之间的相似度&#xff08;这里使用余弦相似度&#xff09; def cosine_similarity(user1, user2): numerator np.dot(user1, user2) denominator np.linalg.norm(user1) * np.linalg.norm(user2) return numerator / denominator if denominato…...

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

神经网络常见激活函数 4-LeakyReLU函数

文章目录 LeakyReLU函数导函数函数和导函数图像优缺点pytorch中的LeakyReLU函数tensorflow 中的LeakyReLU函数 LeakyReLU LeakyReLU&#xff1a; Leaky Rectified Linear Unit 函数导函数 LeakyReLU函数 L e a k y R e L U { x x > 0 p x x < 0 p ∈ ( 0 , 1 ) \rm …...

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发&#xff0c;可以打包成APP&#xff08;非H5封壳&#xff09;H5&#xff0c;接其他平台支付通道&#xff0c;前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG&#xff0c;修复无…...

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…...

2025年度Python最新整理的免费股票数据API接口

在2025年这个充满变革与机遇的年份&#xff0c;随着金融市场的蓬勃发展&#xff0c;量化交易逐渐成为了投资者们追求高效、精准交易的重要手段。而在这个领域中&#xff0c;一个实时、准确、稳定的股票API无疑是每位交易者梦寐以求的工具。 现将200多个实测可用且免费的专业股票…...

2.10学习总结

今天接着看了数据结构&#xff0c;但是跟指针有关的看不懂&#xff08;万恶的指针&#xff09;&#xff0c;写了考试的补题。 #include <stdio.h> #include <stdlib.h> int a[1000005]; int main() {int n,i,x0;scanf("%d",&n);for(i1;i<n;i){x;i…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...