详谈数据库InnoDB引擎与MyISAM引擎

目录

1. 简单了解什么是存储引擎?

2. InnoDB 引擎概述

3. MyISAM 引擎概述

4. InnoDB 与 MyISAM 的一些区别


1. 简单了解什么是存储引擎?

相信很多人在听到存储引擎这个名字的时候可能会有些疑惑,听着名字就觉得有些难,导致很多人没有兴趣了解它,那么它这究竟是个什么东西?

我来说明一个场景,大家就能大概明白它是做什么用的了。

我们都知道,既然是数据库,我们就是用来存储数据的,数据库中会有很多的表,那么各位有没有想过数据库底层究竟是以什么样的格式存储这些表的数据的呢?

这就会用到我们存储引擎,存储引擎在以前叫做表处理器,是后来才改名叫存储引擎的,它的功能就是接收收到的指令,然后对表中的数据进行读写操作。你可以把它理解为存储数据库的表时表的类型,在MySQL数据库中,有很多的存储引擎,它们在存储数据库的表时存储格式也是不一样的。

举个栗子,假设我们的学生表 t_student 使用了A存储引擎,那么底层存储学生表信息时采用了 .txt 文本文件的格式进行存储;我们的用户表 t_user 使用了B存储引擎,那么底层在存储用户表中的信息时会采用 .doc Word文档的形式存储。也就是说,存储引擎不同,数据库底层在存储这些表的数据的时候采用的存储格式也不相同,这样说各位应该就能理解了吧。

在 MySQL数据库中,有好多种存储引擎,这里我重点说明 InnoDB和MyISAM,这两种也是面试中经常问到的两种引擎,问的最多的也是这两种引擎的原理和区别。

2. InnoDB 引擎概述

(1)MySQL 自从 3.23.34 开始就包含了InnoDB引擎,在 5.5 的版本之后 InnoDB 成为了 MySQL 的默认存储引擎;

(2)InnoDB 引擎对于数据的增删改查都具有很好的性能支持;

(3)InnoDB 本身是为了处理巨大量的数据的最大性能而设计的, 当我们表中存储的数据非常非常多时,InnoDB 存储引擎能很好地发挥出它性能的优越性,这与它底层存储数据和索引的结构有关系。

(4)InnoDB 引擎还支持数据库表外键的功能。而且,InnoDB 引擎是MySQL数据库众多引擎中唯一一个支持事务的引擎,可以确保事务的完整提交(Commit)和回滚(Rollback)。在一般情况下,我们建表时都会使用InnoDB作为存储引擎,因为现在绝大多数业务都需要用到事务,而InnoDB引擎又是唯一一个支持事务的存储引擎。

(5)在数据库的底层,使用不同的存储引擎,它们底层在存储数据的时候生成的文件也是不同的,在8.0以后的版本中 ,InnoDB 存储引擎中数据文件就只有一个 表名.ibd 文件了,它里面不仅会存储表的结构以及表的数据,还有索引也会一并存入其中,生成一个文件,合三为一,这一点要记住,与下面我们要说的 MyISAM 引擎存储数据时文件的格式有区别哦!

(6)正是由于 InnoDB 存储引擎将所有的信息存储到了一个数据文件中,所以在读取数据时,InnoDB 引擎不仅要缓存表的数据,还要缓存表的索引,表中的数据如果很多,那么索引占据内存也会很大,因此从另一方面来讲 InnoDB 引擎对内存要求较高,效率也会受内存的影响。

(7)此外,因为 InnoDB 存储引擎支持事务,所以当我们的数据库在受到网络波动或者服务器宕机等一系列不可控不过因素导致崩溃时,它就会开启事务保护功能,我们再次重启数据库服务器,它就会自动从上一次崩溃的时候重新恢复数据,正常运行,极大程度地保证了我们数据的安全性。

3. MyISAM 引擎概述

(1)MyISAM 引擎也是数据库中一个比较重要的引擎,它提供了大量的特性,全文索引,压缩,空间函数等,但不支持事务,行级锁,外键等功能。因此当服务器崩溃时,它就无法基于事务的功能保证数据的安全性,崩溃后数据也无法恢复。

(2)在5.5 版本之前,MyISAM 是数据库的默认存储引擎,到了5.5 版本之后才从 MyISAM 转换成了 InnoDB 。

(3)MyISAM 存储引擎中数据的优势是访问速度特别快,主要针对于对事务完整性没有要求的 SELECT与INSERT 两个操作。最形象的就是历史相关软件,我们可以向数据库中添加历史信息,查询浏览历史信息,但几乎不会去更新历史信息或者删除历史信息,否则不就成了纂改历史了吗。

(4)MyISAM 存储引擎中,它是有一个常量存储表中的数据量的,即 COUNT(*),因此他的时间复杂度为O(1);而我们的 InnoDB 存储引擎在去统计数据时,则是去一条数据一条数据的累加,是现用现算,因此时间复杂度为O(n),因此在数据量的统计上来说,MyISAM 引擎性能是高于 InnoDB 的。

(5)刚才我们提 InnoDB 引擎的时候他也说到了,它的数据文件适合成了一个文件,而 MyISAM 则没有,它是分成了三个文件,分别存储表的结构,表的数据以及表的索引。在底层形成的三个文件分别是  表名.frm(存储表结构),表名.MYD(存储表的数据),表名.MYI(存储索引)。

4. InnoDB 与 MyISAM 的一些区别

InnoDB 存储引擎与 MyISAM 的一些区别我直接放到下边了,重点记住我画线的五个;

这要是给大家来说说行表锁。

行表锁其实不难理解,我举个栗子各位就懂了。

假设现在有一张用户表,有张三和李四,如果我们采用的是 InnoDB 存储引擎,当我们对张三数据进行读写操作的时候,我们只会把张三这一行的数据锁起来,不让其他的线程的读写操作对我们造成干扰,但是如果有线程想要操作李四的信息,是完全可以的,因为李四的数据并没有被锁起来,我们锁住的就是张三这一行的数据;

而假如说我们采用的是 MyISAM 存储引擎,当我们对张三的数据进行读写操作的时候,会把整张用户表都锁起来,即便是有其他操作想要对李四进行读写操作也不行,必须等到张三的信息操作完成才可以,这样各位就能理解了吧!

其实这个行表锁有点类似于Java中的 HashTable与ConcurrentHashMap,HashTable就是操作时锁起来整个数据,不让其他线程进来,而ConcurrentHashMap 则是只锁我们链表的头节点,对其他哈希桶位元素的操作不影响,能够适应多线程并发操作。

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

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

相关文章

【算法题】螺旋矩阵IV (求解n阶折线蛇形矩阵)

一、问题的提出 n阶折线蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn,其中n为正整数。 题目背景 一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成,观察图片,找出填数规律。填数规则为从 1 开始填到 nn。 …

HTTP 协议的基本格式和 fiddler 的用法

目录 一. HTTP 协议 1. HTTP协议是什么 2. HTTP协议的基本格式 HTTP请求 首行 GET和POST方法: 其他方法 经典面试题: URL Header(请求报头)部分 空行 ​HTTP响应 状态码总结: 二、Fiddler的用法 1.Fidder的安装 2.Fidder的使用 一. HTTP 协议 1. H…

如何在 iOS 上安装并使用 ONLYOFFICE 文档

借助 iOS 版文档应用,您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件,查看和编辑现有文本文档、电子表格和演示文稿,创建新文档并对其进行整理,以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档&#xff0c…

多环境_部署项目

多环境: 指同一套项目代码在不同的阶段需要根据实际情况来调整配置并且部署到不同的机器上。 为什么需要? 1. 每个环境互不影响 2. 区分不同的阶段:开发 / 测试 / 生产 3. 对项目进行优化: 1. 本地日志级别 2. 精简依赖&a…

图像的镜像变换之c++实现(qt + 不调包)

1.基本原理 1.水平镜像变化 设图像的宽度为width,则水平镜像变化的映射关系如下: 2.垂直镜像变化 设图像的宽度为height,则垂直镜像变化的映射关系如下: 2.代码实现(代码是我以前自学图像处理时写的,代码很…

ARM(汇编指令)

.global _start _start:/*mov r0,#0x5mov r1,#0x6 bl LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0mov pc,lr*/ mov r0,#0x1mov r1,#0x0mov r2,#0x64bl Loop Loop:cmp r0,r2bhi stopadd r1,r1,r0add r0,r0,#0x01mov pc,lr stop:B stop.end

【Leetcode】基础题||合并有序表(击败100%)

step by step. 题目:(超级基础的题) 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例…

自动测试框架airtest应用一:将XX读书书籍保存为PDF

一、Airtest的简介 Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要…

React Dva项目小优化之redux-action

之前 我们讲过 models 接下啦 我们来给大家讲一个新的库 这个库的话 有最好 没有影响也不大 它主要是帮助我们处理 action的 我们直接在 GitHub 官网上搜索 redux-action 我们搜出来 第一个就是 从星数来看 还是非常优秀的 我们拉下来 找到这个Documentation 然后点击进去 进…

Jmeter - 函数助手

目录 __StringFromFile __CSVRead __counter __RandomString __StringFromFile StringFromFile函数用于获取文本文件的值,一次读取一行 1、输入文件的全路径:填入文件路径 2、存储结果的变量名(可选) 3、Start file sequence …

绘制世界地图or中国地图

写在前面 在8月初,自己需要使用中国地图的图形,自己就此也查询相关的教程,自己也做一下小小总结,希望对自己和同学们有所帮助。 最终图形 这个系列从2022年开始,一直更新使用R语言分析数据及绘制精美图形。小杜的生信笔记主要分享小杜学习日常!如果,你对此感兴趣可以加…

智慧工地一体化云平台源码:监管端、工地端、危大工程、智慧大屏、物联网、塔机、吊钩、升降机

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最终实现项目对人、机、料、法、环的全…

SHELL 基础 SHELL注释 及 执行SHELL脚本的四种方法

SHELL 脚本编写规范 : 脚本开头 : # 脚本第一行 : #! /bin/bash 或 #!/bin/sh ( 脚本解释器 ) # 程序段开头需要加 版本版权信息 ,例如 : # Date 创建日期 # Author : 作者 # …

【【STM32-USART串口协议】】

STM32-USART串口协议 USART串口协议 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 •通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&…

下单接口调优实战,性能提高10倍

目录 概述 用到的工具和环境 工具 环境 找瓶颈 总结 概述 最近公司的下单接口有些慢,老板担心无法支撑双11,想让我优化一把,但是前提是不允许大改,因为下单接口太复杂了,如果改动太大,怕有风险。另外…

js的练习

这里写目录标题 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>window.onload function() // 需要在body加载完成之后&#xff0c;才能通过docu…

【日常积累】Linux之init系统学习

init系统简介: Linux 操作系统的启动首先从 BIOS 开始&#xff0c;接下来进入 boot loader&#xff0c;由 bootloader 载入内核&#xff0c;进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程&#xff0c;这个进程是系统的第一个进程&#xff0c;它负责产生…

云原生 AI 工程化实践之 FasterTransformer 加速 LLM 推理

作者&#xff1a;颜廷帅&#xff08;瀚廷&#xff09; 01 背景 OpenAI 在 3 月 15 日发布了备受瞩目的 GPT4&#xff0c;它在司法考试和程序编程领域的惊人表现让大家对大语言模型的热情达到了顶点。人们纷纷议论我们是否已经跨入通用人工智能的时代。与此同时&#xff0c;基…

React 全栈体系(一)

第一章 React入门 一、React简介 1. 是什么&#xff1f; 是一个将数据渲染为HTML视图的开源JavaScript库。 2. 谁开发的&#xff1f; 由Facebook开源 3. 为什么要学&#xff1f; 原生JavaScript操作DOM繁琐&#xff0c;效率低&#xff08;DOM-API 操作 UI&#xff09; 使…

【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Pythonmatlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…