Mysql存储引擎

目录

一、前言

二、存储引擎

1、InnoDB存储引擎

1.1、简介

1.2、优势

1.3、使用方法

1.4、性能

2、MyISAM存储引擎

2.1、优势

2.2、使用方法

2.3、性能

3、MEMORY存储引擎

4、MyISAM

三、比较

四、总结

一、前言

MySQL是开放源代码的关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低等特点,被广泛应用于各种应用领域。在MySQL中,存储引擎是负责管理数据库中数据存储和处理的核心模块。本文将详细介绍MySQL的存储引擎,包括其功能、特点、使用方法和性能等方面。

二、存储引擎

1、InnoDB存储引擎

1.1、简介

InnoDB是 MySQL 默认的事务型存储引擎,只有在需要它不支持的特性时,才考虑使用其它存储引擎

实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)防止幻影读。

主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升。

内部做了很多优化,包括从磁盘读取数据时采用的可预测性读、能够加快读操作并且自动创建的自适应哈希索引、能够加速插入操作的插入缓冲区等。

支持真正的在线热备份。其它存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取。

1.2、优势

支持事务处理、外键约束、MVCC等;具有较好的并发性能和稳定性。

1.3、使用方法

在创建表时使用InnoDB作为存储引擎,或者通过修改MySQL配置文件来设置默认存储引擎为InnoDB。

1.4、性能

InnoDB在性能和数据完整性方面表现较好,尤其适用于高并发读写和数据一致性要求较高的场景。

2、MyISAM存储引擎

MyISAM是一种非事务性的存储引擎,它不支持事务、行级锁定和外键约束等功能。MyISAM提供了快速的读取性能和较小的数据库文件大小,适用于以读为主的场景,如新闻网站、博客等。

2.1、优势

快速读取性能、较小的数据库文件大小。

2.2、使用方法

在创建表时使用MyISAM作为存储引擎,或者通过修改MySQL配置文件来设置默认存储引擎为MyISAM。

2.3、性能

MyISAM在读取性能方面表现较好,适用于读密集型应用场景,但写入性能相对较差。

3、MEMORY存储引擎

MEMORY存储引擎将所有数据存储在内存中,因此具有非常快的查询速度。然而,如果数据库服务器重启,数据将丢失。MEMORY存储引擎适用于临时表和缓存等场景。

优势:极快的查询速度。

使用方法:在创建表时使用MEMORY作为存储引擎。

性能:MEMORY在查询速度方面表现极佳,但数据是存储在内存中的,因此如果服务器重启,数据将丢失。

4、MyISAM

设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,则依然可以使用它。

提供了大量的特性,包括压缩表、空间数据索引等。

不支持事务

不支持行级锁,只能对整张表加锁,读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入(CONCURRENT INSERT)。

可以手工或者自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据丢失,而且修复操作是非常慢的。

如果指定了 DELAY_KEY_WRITE 选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。这种方式可以极大的提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。

三、比较

  • 事务: InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。

  • 并发: MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。

  • 外键: InnoDB 支持外键。

  • 备份: InnoDB 支持在线热备份。

  • 崩溃恢复: MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。

  • 其它特性: MyISAM 支持压缩表和空间数据索引。

四、总结

MySQL的存储引擎是其核心功能之一,每种存储引擎都有其自身的特点和适用场景。InnoDB适用于高并发读写和数据一致性要求较高的场景,MyISAM适用于读密集型应用场景,MEMORY则适用于临时表和缓存等场景。在选择存储引擎时,应根据应用需求和性能要求进行综合考虑。未来随着技术的不断发展,MySQL的存储引擎也将不断改进和完善,以满足更多应用场景的需求。


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

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

相关文章

对于枚举类型的输出

对于枚举类型的输出 对于枚举类型的输出&#xff0c;您可以使用以下方法&#xff1a;1. 将枚举值转换为整数进行输出&#xff1a;cppODU_TYPE type ODU_TYPE_331;int value static_cast<int>(type);std::cout << "ODU_TYPE: " << value <<…

python 笔记(3)——request、爬虫、socket、多线程

目录 1、使用requests发送http请求 1-1&#xff09;发送get请求 1-2&#xff09;发送 post 请求 1-3&#xff09;发送 get 请求下载网络图片 1-4&#xff09;使用 post 上传文件 1-5&#xff09;自动维护 session 的方式 2、使用 os.popen 执行cmd命令 3、基于 beautif…

【微服务部署】五、Jenkins+Docker一键打包部署NodeJS(Vue)项目的Docker镜像步骤详解

NodeJS&#xff08;Vue&#xff09;项目也可以通过打包成Docker镜像的方式进行部署&#xff0c;原理是先将项目打包成静态页面&#xff0c;然后再将静态页面直接copy到Nginx镜像中运行。 一、服务器环境配置 前面说明了服务器Nginx的安装和配置&#xff0c;这里稍微有些不同&a…

mysql Index

创建索引 方法1 create table 表( col1 int, col2 int, … index | key index_name (列名) 方法2 alter table 表名 ADD index alter table student_table add index index_name(stu_id); 方法3 create index index_name on 表名(列) 删除索引 方式1 alter table xx drop prima…

革命性的电子元件:RAD继电器 | 百能云芯

在现代电子和通信系统中&#xff0c;RAD继电器是一种关键的电子元件&#xff0c;它在各种应用中发挥着重要作用。RAD继电器&#xff08;Reed-relay Actuated Device&#xff09;是一种基于磁性原理的电子开关&#xff0c;其特点是极其高速、可靠、低功耗和长寿命。下面云芯将为…

【Axure视频教程】表格编号函数

今天教大家在Axure里如何使用表格编号函数&#xff0c;包括表格编号函数的基本原理、在需要翻页的中继器表格里如何正确使用该函数、函数作为条件的应用&#xff0c;包括让指定第几行的元件默认变色效果以及更新对应第几行内容的效果。该教程主要讲解表格编号函数&#xff0c;不…

案例分享:西河水库安全监测信息化系统实施方案

一、项目概述1.1项目背景西河水库信息化工作已开展多年&#xff0c;但是由于西河水库监测设备都已经老化或者损坏&#xff0c;现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此&#xff0c;灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…

大数据(七):Pandas的基础应用详解(四)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…

el-date-picker自定义只能选中当前月份和半年内月份等

需求&#xff1a;el-date-picker只能选中当前月期和当前月期往前半年&#xff0c;其他时间就禁用了不让选择了&#xff0c;因为没数据哈哈。当然也可以选择往前一年等。 一、效果 二、写个日期选择器 :picker-options&#xff1a;日期选项 value-format&#xff1a;选择后的格…

设计模式-工厂模式Factory

工厂模式 b.工厂方法模式 (Factory Method) (重点)1) 简单工厂 Simple Factory1.a) 简单工厂的好处 2) 工厂方法 Factory Method2.a) 对工厂进行抽象化 (版本一)2.b) 对工厂进行缓存 (版本二)2.c) 加载配置文件到缓存中 (版本三)c.1) 产品线 c.抽象工厂模式 (Abstract Factory)…

C++ 嵌套循环

一个循环内可以嵌套另一个循环。C 允许至少 256 个嵌套层次。 语法 C 中 嵌套 for 循环 语句的语法&#xff1a; for ( init; condition; increment ) {for ( init; condition; increment ){statement(s);}statement(s); // 可以放置更多的语句 }C 中 嵌套 while 循环 语句的…

漏洞挖掘-利用

目录 一、文章简介 二、Web漏洞 1.SQL注入 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;利用 &#xff08;3&#xff09;碰到的问题 &#xff08;4&#xff09;防御 &#xff08;5&#xff09;注入思路 &#xff08;6&#xff09;危害 2.任意文件读取 &…

SQL-DQL

-----分组查询----- 1.语法&#xff1a; SELECT 字段列表 FROM 表名 [WHERE 条件 ] GROUP BY 分组字段名 [HAVING 分组后过滤条件]&#xff1b; 2.where与having区别 》执行时机不同&#xff1a;where是分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&…

C++ 接口(抽象类)

C 接口是使用抽象类来实现的&#xff0c;接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。且抽象类与数据抽象互不混淆&#xff0c; 如果类中至少有一个函数被声明为纯虚函数&#xff0c;则这个类就是抽象类&#xff0c;数据抽象则是一个把实现细节与相关的接口…

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染 文章目录 一、前言二、qr_flutter 包简介三、安装与配置四、基本使用五、高级功能与自定义六、完整实际业务代码示例七、总结 一、前言 亲爱的 Flutter 初学者&#xff0c;你好&#xff01;今天我要与你分享一个…

【黑马头条之项目部署_持续集成Jenkins】

本笔记内容为黑马头条项目的项目部署_持续集成部分 目录 一、内容介绍 1、什么是持续集成 2、持续集成的好处 3、今日内容 二、软件开发模式 1、软件开发生命周期 2、软件开发瀑布模型 3、软件的敏捷开发 三、Jenkins安装配置 1、Jenkins介绍 2、Jenkins环境搭建 …

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

前言&#xff1a;在部分大厂笔试时经常会使用OJ题目&#xff0c;这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解&#xff0c;希望对各位读者有所帮助。 题目来自牛客网&#xff0c;欢迎各位积极挑战&#xff1a; HJ73:计算日期到天数转换_牛客网 JZ17:打印…

Python Number(数字).............................................

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值&#xff0c;将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建&#xff1a; var1 1 var2 10您也可以使用del语句删除一些 Number 对象引用。 del语句…

CSAPP lab1 Data Lab

CSAPP lab1-Data Lab 前言&#xff1a; 本系列文章用于记录开始学习csapp的过程&#xff0c;奈何感觉自己基础实在太渣渣&#xff0c;系统好好学习一下这本神书以及其对应的lab lab 这一张的lab是真的干&#xff0c;好几道题卡的我脑壳都卡秃噜了&#xff0c;好歹终于凭借着…

【【STM32-29正点原子版本串口发送传输实验】

STM32-29正点原子版本串口发送传输实验 通过串口接收或发送一个字符 例程目的 开发板上我们接入的是实现异步通信的UART接口 USB转串口原理图 我们一步步分析 PA9是串口1 的发送引脚 PA10是串口1 的接受引脚 。因为我们现在只是用到异步收发器功能&#xff0c;所以我们现…