1、认识MySQL存储引擎吗?

news2024/12/24 21:02:14

目录

1、MySQL存储引擎有哪些?

2、默认的存储引擎是哪个?

3、InnoDB和MyISAM有什么区别吗?

3.1、关于事务

3.2、关于行级锁

3.3、关于外键支持

3.4、关于是否支持MVCC

3.5、关于数据安全恢复

3.6、关于索引

3.7、关于性能

4、如何选择MyISAM和InnoDB?

5、小结


1、MySQL存储引擎有哪些?

MySQL支持多种存储引擎,其中最常用的有InnoDB、MyISAM。我们可以通过show engines来查看当前数据库所支持的存储引擎。

2、默认的存储引擎是哪个?

使用show engines可以看到默认的存储引擎是InnoDB。其实MySQL 5.5版本之前,使用MyISAM作为默认的存储引擎,5.5版本之后采用InnoDB作为默认存储引擎。

除了show engines查看存储引擎外,还可以show variables like '%engine%'命令查看MySQL当前默认的存储引擎。

InnoDB存储引擎官方文档:MySQL :: MySQL 8.0 Reference Manual :: 17 The InnoDB Storage Engine

3、InnoDB和MyISAM有什么区别吗?

首先,所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。除了事务属性外,还有其他不一样的地方。

3.1、关于事务

InnoDB支持事务,MyISAM不提供事务支持。InnoDB 实现了 SQL 标准,定义了四个隔离级别,具有commit和rollback事务的能力。InnoDB 默认使用的REPEATABLE-READ(可重复读)隔离级别是可以解决幻读问题发生的。

3.2、关于行级锁

InnoDB支持行级锁和表级锁,默认为表级锁。MyISAM只支持表级锁。正是由于MyISAM只支持表级锁,因此他在并发时的写性能要远远低于InnoDB。

3.3、关于外键支持

InnoDB大家都知道是支持外键的,但MyISAM不支持。外键可以增加数据的约束性,保证数据强一致性,但是在性能上会有一些损耗。

3.4、关于是否支持MVCC

由于MyISAM不支持行级锁,因此肯定不支持MVCC,InnoDB采用MVCC来支持高并发,并实现了四个标准的隔离级别。默认级别是REPEATABLE-READ(可重复读),并且通过间隙锁策略防止幻读的出现。

3.5、关于数据安全恢复

借助于redo log,InnoDB支持数据安全恢复。即当数据库出现异常崩溃后,重新启动时会保证数据库恢复到崩溃前的状态。而MyISAM不支持。

3.6、关于索引

众所周知,InnoDB使用的是B+Tree作为索引结构,类似的MyISAM也是使用的B+Tree。但是InnoDB,其数据文件本身就是索引文件。而MyISAM中,索引文件和数据文件是分离的,其表数据文件本身是按B+Tree组织的一个索引结构,树的叶子节点保存了完整的数据记录。

MyISAM支持全文索引,这是一种基于分词创建的索引,可以支持复杂的查询。

InnoDB是基于聚簇索引建立的,聚簇索引堆逐渐查询有很高的性能,不过他的二级索引(非主键索引)中必须包含主键列,所以如果主键很大的话,其他的所有索引都会很大。因此,如果表上的索引较多,主键应该尽可能小。

3.7、关于性能

MyISAM由于引擎设计简单,数据以紧密格式进行粗出,所以在某些场景下性能很好。但是其典型的问题还是表锁的问题,由于不支持行级锁,所有的查询都会进行锁表(读表时加共享锁,写表时加排他锁)而长期处于Locked状态。在CPU多核心数的加持下,由于InnoDB支持行级锁,其并发读写能力呈线性增长。MyISAM不支持并发,所以他的处理能力在CPU多核心数下显得心有余力不足。

4、如何选择MyISAM和InnoDB?

大多数情况下,InnoDB都是正确的选择,所以Oracle在MySQL 5.5版本时终于将InnoDB作为默认的存储引擎了。

在《高性能MySQL》一书上提到“除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎”。如要用到全文索引,建议优先考虑InnoDB加上Sphinx的组合,而不是直接考虑使用支持全文索引的MyISAM。

如果实在不得已需要使用不同的存储引擎,最好优先考虑以下几个因素:

  1. 事务:应用是否需要支持事务。如果应用需要支持事务,InnoDB则是目前已知的最稳定并且经过验证的选择。如果不需要支持事务,且以select和insert操作为,那么MyISAM也是不错的选择,如日志系统等。
  2. 备份:数据是否需要备份。如果系统坏允许关闭服务进行备份,那么这个因素可以忽略。但是如果需要在线热备份,则选择InnoDB是基本要求了。
  3. 崩溃恢复:数据较大时,系统崩溃后快速恢复是需要考虑的问题。相比之下MyISAM比InnoDB崩溃后发生数据损坏的概率要高很多,且恢复速度也要慢很多。
  4. 特有的特性:有时,应用可能以来一些粗出引擎所特有的特性或优化。比如应用依赖聚簇索引的优化。但是,现实情况是,如今项目你几乎找不到任何理由再使用MyISAM来替代InnoDB了。

5、小结

最后,总结一下两者的差异:

  • InnoDB支持事务,MyISAM不支持事务
  • InnoDB支持行级锁和表锁,MyISAM只支持表锁
  • InnoDB支持外键,MyISAM不支持
  • InnoDB支持MVCC,MyISAM不支持
  • InnoDB支持热备份,数据崩溃后恢复,MyISAM不支持
  • InnoDB性能比MyISAM高上许多

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

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

相关文章

项目经理想提升,可不止PMP这一个证书!

软考 系统集成项目管理工程师 信息系统项目管理师 中高项知识体系 软考价值: 软考的价值体现在多个方面: 在评职称方面,软考可以为个人提供北京工作居住证、一线城市积分落户等方面的支持,有利于个人在工作和生活中的稳定和发…

Java Netty个人对个人私聊demo

一、demo要求 1)编写一个Netty个人对个人聊天系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2)实现单人对单人聊 3)服务器端:可以监测用户上线,离线,并实现消…

【新手上路】C#联合Halcon第一个demo搭建

前言 学习Halcon目的是能够利用C#封装成一个视觉的上位机应用配合机器人或者过程控制来提高生产的效率,尤其是在检测外观和定位方面的应用。现在我们就来搭建第一个demo。让他们能够跑起来! Halcon方面 打开Halcon软件,然后先随便写一个代…

ADW310 导轨式单相无线计量仪表-安科瑞黄安南

ADW310 无线计量仪表主要用于计量低压网络的有功电能,具有体积小、精度高、功能丰富等优点,并且可 选通讯方式多,可支持 RS485 通讯和 Lora、4G 等无线通讯方式,增加了外置互感器的电流采样模式,从而方便 用户在不同场…

uniapp使用npm命令引入font-awesome图标库最新版本

uniapp使用npm命令引入font-awesome图标库最新版本 图标库网址:https://fontawesome.com/search?qtools&or 命令行: 引入 npm i fortawesome/fontawesome-free 查看版本 npm list fortawesome在main.js文件中: import fortawesome/fo…

想在小红书写出数据分析类的爆文?带你分析爆文的写作思路

一、小红书运营分析背景介绍 在如今社交媒体的浪潮中,小红书、抖音、知乎等平台的流量如同滚滚长江,吸引了无数公司和品牌前来淘金。对于想要推广公司的产品和主营业务而言,如何在这些平台上脱颖而出,成为了一大难题。 数据分析&a…

Java文件流操作

一、文件创建和删除 public static void main(String[] args) throws IOException {File file new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txtSystem.out.println(file.getPath());//返回当前相对路径System.out.println(file.getCanoni…

小型案例(acl,nat,dns,dhcp,静态路由)

实验目录:内网互通,pc不可以访问外网,server2可以通过外网访问(nat技术),pc2,和pc3可以访问外网 拓扑图如下 配置信息如图,pc1~3 和server2 对应vlan分别是10,20&#…

Matlab 修改图例顺序

对于使用 .m 文件绘制的图片,可以修改程序中图例的顺序来改变图片的图例。如果图片所对应的 .fig 文件已经存在,而且不便修改源程序,则可以通过如下方式来修改图例: step 1: 打开fig文件,然后点击绘图浏览器 step 2&…

Qt实现无边框圆角窗口

我们在使用QDialog的时候许多场景下都不需要默认的标题栏,这时候我们需要设置他的标志位。 this->setWindowFlags(Qt::FramelessWindowHint);由于现代的窗口风格,我们一般会设置窗口为圆角边框的样式,我们可以使用qss的方式来进行设置。 …

WebAPI(一)之DOM操作元素属性和定时器

webAPI之DOM操作元素属性和定时器 介绍概念DOM 树DOM 节点document 获取DOM对象操作元素内容操作元素属性常用属性修改控制样式属性操作表单元素属性自定义属性 间歇函数今日单词 了解 DOM 的结构并掌握其基本的操作,体验 DOM 的在开发中的作用 知道 ECMAScript 与 …

鱼骨图功能实现

dom: <div class="module-content"><div class="title"><span>[</span><p>鱼骨图</p><span>]</span></div><div class="line-mian"></div><div :ref="module + i&q…

Francek Chen 的128天创作纪念日

目录 Francek Chen 的128天创作纪念日机缘收获日常成就憧憬 Francek Chen 的128天创作纪念日 Francek Chen 的个人主页 机缘 不知不觉的加入CSDN已有两年时间了&#xff0c;最初我第一次接触CSDN技术社区是在2022年4月的时候&#xff0c;通过学长给我们推荐了几个IT社区平台&a…

Redis数据库——主从、哨兵、群集

目录 前言 一、主从复制 1.基本原理 2.作用 3.流程 4.搭建主动复制 4.1环境准备 4.2修改主服务器配置 4.3从服务器配置&#xff08;Slave1和Slave2&#xff09; 4.4查看主从复制信息 4.5验证主从复制 二、哨兵模式——Sentinel 1.定义 2.原理 3.作用 4.组成 5.…

数字逻辑分析仪初体验

为啥会用到这玩意儿&#xff0c;要从一个荒诞的需求开始。想在市面上找一款特别低空飞行的监控&#xff0c;而且不想它一直开着监控&#xff0c;最好是我在外面远程指挥它起飞&#xff0c;飞去厨房&#xff0c;飞去洗手间&#xff0c;甚至飞去阳台&#xff0c;查看水龙头情况啊…

【力扣白嫖日记】1435.制作会话柱状图

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1435.制作会话柱状图 表&#xff1a;Sessions 列名类型session_idintdurationint session_id 是该表主键,d…

技术驱动下的同城O2O发展:跑腿配送APP开发教学

在同城生活服务领域&#xff0c;跑腿配送APP的出现与发展&#xff0c;为人们的日常生活提供了极大的便利。今天&#xff0c;小编将着重为大家讲解技术驱动下的同城O2O发展&#xff0c;并从跑腿配送APP的开发角度进行教学和解析。 一、同城O2O发展概述 在同城O2O模式中&#x…

摆动序列(力扣376)

文章目录 题目前知题解一、思路二、解题方法三、Code 总结 题目 Problem: 376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元…

《web应用技术》第二次课后练习

练习目的&#xff1a; 1、form表单值的获取 2、mysql数据库及表的建立&#xff08;参见视频&#xff09; 3、maven项目的建立&#xff08;参见视频&#xff09; 4、使用jdbc进行数据库的增删改查操作。&#xff08;参见源代码&#xff09; 具体如下&#xff1a; 1、继续理…

mysql dublewrite 双写缓存机制

mysql dublewrite 双写缓存机制&#xff0c;像不像主板双bois系统&#xff0c; 在MySQL的InnoDB存储引擎中&#xff0c;当进行数据写操作时&#xff0c;会先将数据写入到内存中的缓冲池&#xff08;Buffer Pool&#xff09;&#xff0c;然后异步刷新到磁盘上的数据文件。为了提…