【数据库三】数据库的存储引擎

news2024/12/23 23:15:07

存储引擎

  • 1.存储引擎
    • 1.1 概念介绍
    • 1.2 常用存储引擎
  • 2.MyISAM
    • 2.1 特点介绍
    • 2.2 支持的存储格式
    • 2.3 适用的生产场景
  • 3.InnoDB
    • 3.1 特点介绍
    • 3.2 适用生产场景分析
    • 4.企业选择存储引擎依据
  • 5.MyISAM和InnoDB的区别
  • 命令操作

1.存储引擎

1.1 概念介绍

在这里插入图片描述

在这里插入图片描述

  • MySQL数据库中的组件,负责执行实际的数据I/O操作

  • MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

1.2 常用存储引擎

常用存储引擎:InnoDB、MyISAM

MyISAM: 不支持事务和外键约束,占用资源较小,访问速度快,表级锁定,支持全文索引,适用于不需要事务处理,单独写入或查询的应用场景
InnoDB: 支持事务处理、外键约束,缓存能力较好,支持行级锁定,读写并发能力较好,5.5版本后支持全文索引,适用于一致性要求高、数据更新频繁的应用场景

2.MyISAM

2.1 特点介绍

  • MylSAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的
  • 访问速度快,对事务完整性没有要求
  • MylSAM适合查询、插入为主的应用
  • MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:
    在这里插入图片描述
    在这里插入图片描述

2.2 支持的存储格式

MyISAM表支持3 种不同的存储格式:
(1)静态(固定长度)表

静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。

(2)动态表

动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行optimize table语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难

(3)压缩表

压缩表由myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

2.3 适用的生产场景

  • 公司业务不需要事务的支持
  • 单方面读取或写入数据比较多的业务
  • MyISAM存储引擎数据读写都比较频繁场景不适合
  • 使用读写并发访问相对较低的业务
  • 数据修改相对较少的业务
  • 对数据业务一致性要求不是非常高的业务
  • 服务器硬件资源相对比较差

3.InnoDB

3.1 特点介绍

  • 支持事务,支持4个事务隔离级别
  • MySQL从5.5.5版本开始,默认的存储引擎为InnoDB
  • 读写阻塞与事务隔离级别相关
  • 能非常高效的缓存索引和数据
  • 表与主键以簇的方式存储
  • 支持分区、表空间,类似oracle数据库
  • 支持外键约束,5.5前不支持全文索引,5.5后支持全文索引
  • 对硬件资源要求还是比较高的场合
  • 行级锁定,但是全表扫描仍然会是表级锁定,如
update table set a=1 where user like "%zhang%";
  • InnoDB中不保存表的行数,如select count(*) from table;InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。需要注意的是,当count(*)语句包含where条件 MyISAM也需要扫描整个表.
  • 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立组合索引.
  • 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MylSAM则会重建表

3.2 适用生产场景分析

在这里插入图片描述

4.企业选择存储引擎依据

在这里插入图片描述
索引的支持

  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能
  • 不同的存储引擎提供不同的制作索引的技术
  • 有些存储引擎根本不支持索引

事务处理的支持

  • 提高在向表中更新和插入信息期间的可靠性
  • 可根据企业业务是否要支持事务选择存储引擎

5.MyISAM和InnoDB的区别

区别类型MyISAMInnoDB
构成上的区别每个MyISAM在磁客上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存情表定义。数据文件的扩展名为MYD(MYData)。素引文件的扩展名是MY(MYIndex)。基于磁盘的资源是InnoDB表空问数据文件和它的日志文件,InnoDB表的大小只受限于操作系统文件的大小,一般为 2GB
事务处理上方面MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持InnoDB提供事务支持事务,外部睫 (foreign key)等高级数据库功能
select、update、insert、delete操作如果执行大量的select,MyISAM是更好的选择1.如果你的数据执行大盘的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 2.delete from table时,InnoDB不会重新建立表,而是一行一行的删除。 3.load table from master操作对InnoDe是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
对 auto_increment的操作每表一个auto_increment列的内部处理 MyISAM为INSERT和update操作白动更新这-列这使得auto_increment列更快(至少10%),在序列顶的值被删之后就不能再利用。(当AUTOINCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况).auto_increment值可用alter table或myisamch来重置对于auto_increment类型的字段,InnoDB中必须包含只有该字段的素引,但是在MylSAM表中,可以和其他字段一起建立联合索引,更好和更快的auto_increment处理如果你为一个表指定auto_increment列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计散器,它被用在为该列赋新值。 自动增长计数器仅被存储在生内存中,而不是存在德盘上 关于该计算器的算法实现,请参考 AUTOINCREMENT列在InnoDB里如何工作
表的县体行数select count()from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(语句包含 where条件时,两种表的操作是一样的InnoDB 中不保存表的具体行数,也就是说,执行select count()from table时,InnoDB要扫描一遍整个表来计算有多少行
表锁提供行锁(lockingonrow level)提供与 Oracle类型一致的不加锁这取(nonocking readin select),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like "%aaa%"

命令操作

查看系统支持的存储引擎

show engines;

在这里插入图片描述

查看表使用的存储引擎

方法一:

show table status from 库名 where name='表名'\G

方法二:

use 库名;
show create table 表名;

例如:

show table status from gzy where name='clr'\G;

use gzy;
use gzy;

在这里插入图片描述
在这里插入图片描述

修改存储引擎

(1) 通过alter table修改

use 库名;
alter table 表名 engine=MyISAM;

例如:

alter table clr engine=MyISAM;

(2) 通过修改/etc/my.cnf 配置文件,指定默认存储引擎并重启服务
vim /etc/my.cnf

......
[mysqld]
......
default-storage-engine=INNODB

systemctl restart mysql.service

注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

(3) 通过 create table 创建表时指定存储引擎

use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;

//InnoDB行锁与索引的关系
InnoDB行锁是通过给索引项加锁来实现的,如果没有索引,InnoDB将通过隐藏的聚簇索引来对记录加锁。

1)
delete from t1 where id=1;
如果id字段是主键,innodb对于主键使用了聚簇索引,会直接锁住整行记录。

2)
delete from t1 where name=‘aaa’;
如果name字段是普通索引,会先锁住索引的两行,接着会锁住相应主键对应的记录。

3)
delete from t1 where age=23;
如果age字段没有索引,会使用全表扫描过滤,这时表上的各个记录都将加上锁。

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

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

相关文章

深层神经网络

1、深层网络中的前向传播 一个训练样本 x 前向传播 第一层需要计算 𝑧 [1] 𝑤[1]𝑥 𝑏 [1],𝑎 [1] 𝑔 [1] (𝑧 [1] )(𝑥可以看做 𝑎 [0] &am…

软件工程导论期末救急包(中)

目录 用户需求 需求分析常用的分析方法 软件设计 创建良好设计的原则 内聚性 耦合性 UML中各种视图及其作用 用例视图VS逻辑视图 UML中的主要图及其作用 软件开发过程与UML可视化建模 MVC模式 MVVM模式 面向对象模型主要哪些模型组成? 概要设计阶段的基本任务是什…

联想小新 Pro 16 2022 锐龙版开启S3睡眠模式方法,解决S0睡眠发热耗电容易唤醒等烦恼

联想小新 Pro 16 2022 锐龙版,CPU为AMD Ryzen 7 6800H 默认为S0睡眠模式,经常发热睡死过去,并且无法禁止鼠标唤醒电脑 本文借助“Universal AMD Form Browser”软件,在固件层面修改笔记本的睡眠方式。 本文所用到的软件Univer…

【Unity】 基础入门 编译错误排查与调试方法

基础入门 编译错误排查与调试方法 一、常见编译错误原因1、环境问题2、代码命名问题二、代码调试方法1、基础调试方法2、高级玩法3、unity调试工具插件一、常见编译错误原因 1、环境问题 1、Win11系统不兼容部分unity版本 考虑换系统吧! 2、可能是系统权限问题,访问不到部分…

jmeter工具介绍

Jmeter性能测试工具介绍 Jmeter的背景介绍Jemter过程类元件介绍Jmeter结果查看类元件介绍Jmeter其他介绍 Jmeter背景介绍: Apache JMeter是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测试。它最初被设计用于…

C++技能系列 ( 2 ) - const的几种使用【详解】

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦!!! 生活就是上帝发给你的一张手牌,无论多烂,你都得拿着。 Life is god give you a hand, no matter ho…

【前端面试手册】CSS系列-01

本专栏收录于《前端面试手册-CSS篇》如果该文章对您有帮助还希望你能点一个小小的订阅,来增加博主创作的动力✍🏻 一、什么是盒子模型,说说你的理解? 首先,如果你要对一个文档进行布局的时候,浏览器的渲染…

[进阶]Java:对象序列化、反序列化

对象序列化: 使用到的流是对象字节输出流:ObjectOutputStream作用:以内存为基础,把内存中的对象存储到磁盘文件中去。称为对象序列化。 代码演示如下: 学生类: /**对象如果要序列化一定要实现Serializab…

力扣题库刷题笔记7--N字型变换

1、题目如下: 2、个人Python代码实现: 看到此题的第一反应就是,生成一个类似二维数组的多个字符串,然后用个标志位控制N字符中字符的方向,例如flag True,在每次循环时候以flag flag * -1来控制。 由于示例…

Oracle-ASM磁盘组HIGH模式丢盘问题处理

背景: 用户一套Oracle19c的RAC集群ASM磁盘组使用了3个存储作为HIGH以及NORMAL冗余模式,每个存储分别对应一个failgroup,其中2个存储出现了故障导致ASM磁盘组对应的failgroup磁盘全部offline,在存储恢复正常之后,需要将offline的磁…

2020年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2020年英语二联考真题 一、完形填空 Directions: Read the following text. Choose the best word for each numbered blank and mark A, B, C or D on the ANSWER SHEET (10 points) Being a good parent is what every parent would like to be. But defining what it mea…

《Java黑皮书基础篇第10版》 第17章【习题】

Java语言程序设计 习题第十七章 17.2章节习题 17.1什么是文本文件,什么是二进制文件?可以使用文本编辑器来查看文本文件或者二进制文件吗? 文本文件是字符组成的文件,二进制文件是0和1组成的文件 文本编辑器只能访问文本文件 17…

一文教你彻底学会SPI协议

一文教你彻底学会IIC协议 一.概况SPI二.SPI连接2.1 一主一从2.2 一主多从 三.SPI通信过程3.1 CPOL(极性)和CPHA(相位)3.2 SPI时序图3.1 SPI起始信号3.2 SPI停止信号3.3 数据的有效性 四.代码实例 一.概况SPI SPI 协议是由摩托罗拉…

腾讯云服务器开Minecraft配置怎么选择?

腾讯云服务器Minecraft我的世界服务器配置怎么选择?10人以内玩2核4G就够用了,腾讯云开我的世界服务器选择轻量应用服务器就够了,轻量CPU采用至强白金处理器,大型整合包一般1.12版本的,轻量2核4G配置都差不多的&#xf…

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术,智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗,打电话人员抽烟等违规行为,灭火器未正确摆放,明火和烟雾等异常状态&a…

VMware 逃逸基础知识

虚拟化相关概念 VMM:即 VM Monitor ,也被称为 Hypervisor(虚拟机监控程序)。VMM 是 guest os 的管理器,管理虚拟机运行。例如 Windows 的 Hyper-V ,linux 的 KVM 以及裸机上安装的 Xen 和 VMware ESXi 都属…

《MySQL是怎么运行的》阅读笔记

mysql运行的整体架构简介 Mysql是由两部分构成,一部分是服务器程序,一部分是客户端程序。 服务器程序又包括两部分: 第一部分server层包括连接器、查询缓存、分析器、优化器、执行器等。涵盖 MySQL 的大多数核心服务功能,以及所有…

【Android复习笔记】Glide核心原理

Glide 核心流程 Glide中RequestManager会管理两个队列,一个请求队列,一个等待队列,当生命周期onStop停止时,把运行队列中的任务添加到等待队列中,当生命周期onResume恢复时,又从等待队列中添加到运行队列执行。 关于 Glide.with(this).load(url).into(iv); 主要搞清楚三…

Doris初认识

Doris初认识 文章目录 Doris初认识1. Doris 概述2. 核心特性3. 使用场景4. 架构 1. Doris 概述 Apache Doris 是由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,更名为 Doris ),在百度内部&#xff…

Schneider Electric EcoStruxure Control Expert 15.3 Crack

Schneider Electric EcoStruxure Control Expert 15.3专为使用施耐德电气的Modicon PLC(可编程逻辑控制器)的控制和自动化工程师量身定制。它提供了一系列功能和工具,以方便自动化应用程序的开发、部署和维护。 施耐德电气EcoStruxure控制专家…