MySQL-存储引擎

好久没写博客了,也不知道这一篇我要写多久才能发布出去,最难不过开始,该启动新的篇章了。虽然日常学习、开发中一直使用MySQL,但是对其只有大概的了解,今天开始跟黑马程序员的MySQL进阶课程学习。

MYSQL体系架构:

图片

 如图,MySQL还是一种比较清晰的B/S架构,符合本小白的基础架构认知。

MySQL的服务层简单分成4层架构,和平时我看到的java3层架构有所不同:

  • 连接层:提供认证授权、处理连接等操作,这一层比较类似MVC架构中的controller层;
  • 服务层:核心业务处理,功能上图所示,这一层就是MVC中的service层;
  • 引擎层:负责MySQL中数据存储和提取,很像MVC架构中的repository层,可拔插的数据访问层;(值得注意的是,索引是在这一层实现的,因此B+树这个索引是在innoDB实现的)
  • 存储层:在文件系统上真正存储数据的地方,并且可以与存储引擎。

综上,我初步判断,MySQL的架构和一个web服务大同小异。

 

存储引擎

存储引擎是存储数据、建立索引、更新/查询数据等技术的实现方式,是基于表的。因此存储引擎 = 表类型。

也就是说,我们在建表的时候需要指定表的类型,在使用create table函数时,会在结尾默认加上ENGINE = InnoDB

show create table table_name;

图片

注意: 这里的CHARSET=utf8mb3,我大概猜到以后使用中文、emoji的时候可能会出现问题。一般情况下创建表我们都是使用utf8mb4的。

show engines;

图片

 可以看到innoDB是默认的存储引擎,甚至还有csv,怪不得MySQL导出csv文件的时候还算方便(csv文件还能转换成excel,因此可以MySQL->csv->excel)

innoDB

特点:

  • DML遵循ACID特性,支持事务
  • 行级锁,提高并发性能
  • 支持外键

innoDB存储的表会以.idb结尾,即tableName.idb。这里会存放表结构文件、数据、索引等信息。

innoDB的逻辑存储结构:让人略微回想起操作系统的课程...好像在哪里见过

tableSpace对应的是tableName.idb文件

page是磁盘操作的最小单元

row代表一行数据,其中trx_id就是MVCC里用到的,记录最后一次操作事务的id

HBNN7QXP4OF{Z4HD04[2(RY

 

myisam(鸡肋1号,丐版MongoDB):特点:不支持事务、行级锁(但是支持表级锁),访问速度快(真的没用啊,怪不得淘汰了)

memory(鸡肋2号,丐版Redis):特点:快,因为硬盘只存表结构,数据存在内存里,而且用的哈希索引。(也是不支持行锁)可做临时表/缓存

posted @ 2025-10-13 22:53  天启A  阅读(3)  评论(0)    收藏  举报