MySQL-存储引擎

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。如果建表时没有指定存储引擎,则MySQL5.5版本之后默认为InnoDB

可以通过查询建表语句:show create table ***;(***为表名)来查看这个表的存储引擎。
如:

image-20240718151608268

在建表语句的最后会看到:

image-20240718151902178

ENGINE=InnoDB这个就是该表的存储引擎。
AUTO_INCREMENT=43表示:下一个申请的id为43;CHARSET=utf8mb4表示字符集为默认的utf-8COLLATE=utf8mb4_0900_ai_ci表示他的排序方式。

  1. 建表时指定存储引擎
    CREATE TABLE 表名(
    ……
    ) ENGINE=InnoDB
    
  2. 查看当前数据库支持的存储引擎SHOW ENGINES

    image-20240718152645567

    Engine:存储引擎

    Support:是否支持

    Comment:注释

    Transactions:是否支持事务

    XA:是否支持XA协议

    Savepoints:是否支持保存点


存储引擎特点

  1. InnoDB

    介绍:

    InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。

    特点:

  • 支持DML操作遵循ACID模型,支持事务;(DML主要是增删改语句,ACID:十五的四大特性:原子性、隔离性、一致性、持久性)
  • 行级锁,提高并发访问性能;
  • 支持外键FOREIGN KEY约束,保证数据的完整性和正确性。

    文件:

    xxx.idb:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。(早期有一个文件叫frm,在8.0之后表结构都存储在了sdi这个数据字典)

    参数innodb_file_per_table决定到底是多张表共用一个共享表空间还说每一个表都对应一个表空间文件。(在MySQL8.0版本中这个开关是打开的,代表每一张表都对应一个表空间文件)

    可以使用show variables like 'innodb_file_per_table'命令查看该开关是否打开。用命令show variables like可以进行模糊匹配查看系统的环境变量。

    image-20240730100007313

    MySQL安装路径\data\数据库名的文件夹里,会装着这个数据库下的表的空间文件。比如我的数据库为login,有一张表user。那么该文件夹里就是这样:

    image-20240730100407457

    该文件记录了表结构、数据和索引.ibd文件是二进制的,不能直接以技术本打开。可以通过cmd指令:ibd2sdi 文件名,例如:ibd2sdi user.ibd查看。

    image-20240730100850714

  1. MyISAM

    介绍:

    MyISAM是MySQL早期的默认存储引擎。

    特点:

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

    文件:

    共有3个文件:Xxx.MYD、Xxx.MYI、Xxx.sdi

  • Xxx.sdi存储表结构信息,MyISAM的sdi文件是一个文本文件,可以直接打开,里面存放的是JSON格式的数据。

  • Xxx.MYD存储数据
  • Xxx.MYI存储索引
  1. Memory

    介绍:

    Memory引擎的表数据是存储在内存中的,由于收到硬件问题、或断电问题的影响,这些数据会丢失,所以只能将这些表作为临时表或者缓存使用。

    特点:

  • 内存存放
  • hash索引(默认)

    文件:

    Xxx.sdi:存储表结构信息

    因为Memory的数据是存储在内存中的,所以Memory的Xxx.sdi文件只存放表结构信息。

三个存储引擎的异同:

image-20240730104311788

重点关注InnoDBMyISAM的三大区别:

  1. InnoDB支持事务安全,MyISAM不支持事务安全。
  2. InnoDB 支持行锁MyISAM只支持表锁
  3. InnoDB支持外键,MyISAM不支持外键。

存储引擎的选择

存储引擎是没有好坏之分的,我们只需在合适的业务场景中选择合适的存储引擎即可。

InnoDB:

是MySQL的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。

MyISAM:

如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。

MEMORY:

将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。


Innodb的逻辑存储结构

Innodb的逻辑存储结构分为表空间(TableSpace)、段(Segment)、区(Extent)、页(Page)、行(Row)。

image-20240730102020090

Innodb的逻辑存储结构中:

  • 页(Page)是磁盘操作的最小单元
  • 一个区的大小是固定的:1M,这也意味着一个区可以包含64个页
  • 一个页的大小也是固定的:16k

在一个Row中会包含:

  • Trx id最后一次操作失误的id
  • Roll pointer指针
  • column一个个的字段

创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇