0


<五>从0基础到中级DBA(MySQL篇)----------->存储引擎

1.MySQL的体系结构

   ** 连接层**:最上层的一些客户端和链接服务,主要完成一些类似于连接处理、授权认证及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

    **服务层**:第二层架构主要完成大多数的核心服务功能、如SQL接口并完成缓存的查询、SQL的分析和优化、部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。

    **引擎层**:真正的负责了MySQL中数据的存储与提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能。

    **存储层**:主要时将数据存储在文件系统之上,并完成与存储引擎的交互。 

2.存储引擎的概念

    谈到MySQL的存储引擎大家一定很陌生,但如果把存储去掉只剩下引擎,我想大家应该不陌生了吧,引擎========>其实就是发动机;

    引擎非常重要,就好比我们买了一辆车但是没有发动机,这样的话他就发挥不了一个车该有的作用。

    在假如,如果一架飞机装上了汽车的引擎,这也是不行的,所以引擎也不是随便哪一个都可以。     说了这么多,想必大家也明白了引擎的重要性,接下来我们就来看一看今天的主角——存储引擎。
    存储引擎,是MySQL中特有的,是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型 
-- MySQL早期的默认存储引擎是 ==> MyISAM
-- 在MySQL的5.5版本之后默认存储引擎是 ==> InnoDB
    在创建表时指定存储引擎:
create table 表名(
    字段1  数据类型  [comment  字段注释] ,
    字段2  数据类型  [comment  字段注释] ,
    字段3  数据类型  [comment  字段注释] ,
    ...     ...     [...]
    字段n  数据类型  [comment  字段注释] 
        ) engine= innoDB [comment 数据表的注释]
     查询当前数据库支持的存储引擎:
show engines;

3.存储引擎的特点

InnoDB-------------->是一种高可靠性和高性能的通用存储引擎

    特点:1、DML操作遵循ACID模型,支持事务

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

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

    文件:在磁盘中存入文件为:xxx.ibd (xxx代表表名)=====>InnoDB引擎的每张表都会对应这样一个表空间文件,其中存有表的表结构(frm[8.0版本之前]、sdi)、数据和索引。

    参数:innodb_file_per_table        该参数默认为开,意味着每张表都有一个表空间文件
-- 查询开关情况
show variables like 'innodb_file_per_table';
-- 查看ibd格式文件,用命令行执行
ibd2sdi 文件名

MyISAM---------------->MySQL早期的默认存储引擎

    特点:不支持事务,不支持外键

               支持表锁,不支持行锁

                访问速度快

    文件:1.   xxx.MYD======>存储表中的数据

               2.   xxx.MYI=======>存储索引

               3.   xxx.sdi========>存储表结构信息

            (其中sdi格式的文件文本格式为json格式,登录网址www.json.cn进行格式化后就可以很容易读懂)

Memory-----------------> 该引擎的表数据时存储在内存中的,由于受到硬件问题或断电问题的影响,只能将这些表作为临时表和缓存使用

    特点:内存存放=====>访问速度快          支持hash索引(默认)[哈希索引] 

    文件:xxx.sdi=======>存储表结构信息        (因为数据都在内存中)

4.特点罗列对比

此表十分重要,面试题中会有:

    谈谈InnoDB 和 MyISAM 的区别

特点InnoDBMyISAMMemory存储限制64TB有有事务安全支持————锁机制行锁表锁表锁
B+tree索引
支持支持支持Hash索引————支持全文索引支持(5.6版本之后)支持——空间使用高低N/A内存使用高低中等批量插入使用低高高支持外键支持————

二、InnoDB的逻辑存储结构

     在该存储引擎中,Page  时磁盘操作的最小单元,一个Page的大小为固定的 16K   

一个Extent的大小为固定的 1M ========> 可计算出一个Extent中有 64 个 Page

三、存储引擎的选择

    首先,存储引擎没有好坏之分,我们需要按需求来选择合适的存储引擎

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

    MyISAM------>如果应用以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那MyISAM存储引擎比较合适。

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

InnoDB=====>适合核心数据

MyISAM=====>例如,日志、评论、弹幕...... 现被NOSQL系列中的MongoDB 替代

Memory======> 现被NOSQL系列中的Redis 替代

四、总结

    经过以上的学习,相信大家对MySQL中特有的存储引擎有了一定的了解, 也希望本篇文章能够帮到大家,当然如果有表达不恰当的地方也欢迎大家前来指正,再次谢谢大家!!!
标签: mysql dba 数据库

本文转载自: https://blog.csdn.net/m0_57588393/article/details/123930667
版权归原作者 @—笨小孩—@ 所有, 如有侵权,请联系我们删除。

“<五>从0基础到中级DBA(MySQL篇)----------->存储引擎”的评论:

还没有评论