• MySQL的进阶篇1-MySQL的存储引擎简介


    存储引擎

    MySQL的体系结构

    0、客户端连机器【java、Python、JDBC等】

    1、【MySQL服务器-连接层】认证,授权,连接池

    2、【MySQL服务器-服务层】 {SQL接口(DML、DDL、存储过程、触发器)、解析器、查询优化器、缓存}

    3、【MySQL服务器-存储引擎层】{InnoDB、MyISAM、NDB、Archive。。。。可插拔式}

    ​ 控制的是MySQL当中数据存储和提取的方式,服务器会通过存储引擎和API进行通信和交互。

    ​ 【索引是在存储引擎层实现的,也就意味着不同的存储引擎,索引的结构是不一样的】

    ​ InnoDB是MySQL5.5版本之后默认的存储引擎。

    4、【MySQL服务器-存储层】持久化到磁盘当中的文件和日志。

    存储引擎简介

    ​ 引擎没有好坏之分,不同的场景使用不同的引擎。

    ​ 存储引擎是MySQL当中特有的,就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。

    ​ show create table user;

    CREATE TABLE `user` (
      `user_id` int(11) NOT NULL,
      `username` varchar(60) DEFAULT NULL,
      `user_status` char(1) DEFAULT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    show engines;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ENGINE=InnoDB DEFAULT CHARSET=utf8 指定存储引擎。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    存储引擎特点

    1、InnoDB

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

    特点:

    ​ 1、DML操作遵循ACID模型,支持事务

    ​ 2、行级锁,提高并发访问性能。

    ​ 3、支持外键 Foreign key约束,保证数据完整性和准确性。

    磁盘文件:

    ​ 每一个InnoDB表都会对应磁盘文件。

    ​ xxx.ibd:xxx代表的是表名,InnoDB引擎的每张表都会对应这样的一个表空间文件,存储该表的表结构(frm,sdi)、数据、和索引。

    ​ 参数:innodb_file_per_table

    show variables like 'innodb_file_per_table';
    
    • 1

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    ibd2sdi emp.ibd 就会返回数据文件的json记录。

    逻辑存储结构:

    1、tablespace:表空间

    2、segment:段

    3、Extent:区,大小固定,为1M,可以包含64个页。

    4、Page:页,大小固定,为16K

    5、Row:行【再里边就包含事务id、指针、和列记录了 】

    2、MyISAM

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

    特点:

    不支持事务、不支持行级锁、不支持外键

    支持表锁,访问速度快

    磁盘文件:

    tb_book.MYD :数据

    tb_book.MYI:索引

    tb_book_448(序号自增).sdi:表结构

    3、Memory

    ​ 表数据是存储在内存当中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。

    特点:

    ​ 由于放到内存中,访问速度快。

    ​ 支持hash索引(默认)

    文件:

    xxx.sdi:存储表结构信息,因为它的数据都是存储到内存中,所以不持久化到磁盘。

    4、存储引擎特点-总结:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    存储引擎选择

    InnoDB:对数据一致性要求较高;

    MyISAM:读操作和插入操作为主。【日志和评论】

    Memory:做缓存。但是内存大小有限制。

  • 相关阅读:
    手把手写算法(学个语言)
    共生与共享:线程与进程的关系
    web前端日常更新 8.16
    【uniapp】uniapp开发移动端项目使用highcharts(蜘蛛图示例)
    (Vue笔记)VSCode创建与运行 Vue-cli + @Vue-cli 项目
    C++虚函数剖析-从二级指针角度
    Spring-RabbitMQ 异步消息接收实践
    Python全攻略:基础学习、爬虫编程实战和面试技巧
    41. 干货系列从零用Rust编写负载均衡及代理,websocket与tcp的映射,WS与TCP互转
    高项_第十二章项目采购管理
  • 原文地址:https://blog.csdn.net/pshdhx/article/details/133036169