首页 > 数据库 >【后端面经-数据库】MySQL的存储引擎简介

【后端面经-数据库】MySQL的存储引擎简介

时间:2023-06-09 23:56:59浏览次数:57  
标签:文件 存储 简介 端面 支持 引擎 外键 MyISAM MySQL

目录

MySQL的存储引擎

mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。

0. 存储引擎的查看和修改

  • 查看当前数据库的默认存储引擎
    show variables like 'default_storage_engine';
    
  • 查看当前数据库所支持的存储引擎
    show engine;//语句1
    show variables like 'have_%';//语句2
    
  • 查看支持事务处理的存储引擎
    select engine from information_schema.engines where transactions='yes';
    
  • 设置新表的存储引擎
    create table 表名 (字段名 字段类型) engine=存储引擎;//语句1
    create table 表名 (字段名 字段类型) type=存储引擎;//语句2
    

1. MyISAM

  1. 文件组成
    • .frm文件:表结构定义,frame,可以理解成对整体框架的存储
    • .MYD文件:数据文件,存储的是具体的数据库数据条目
    • .MYI文件:索引文件,存储的是数据库表项的索引文件
      如果用图书管理系统做比喻的话,那么,.frm文件存放的是书架本身,.MYD文件存储具体的书籍,.MYI文件存储检索书籍的索引目录。
      .MYI文件.MYD文件可以存储在不同的文件目录中,从而分散IO读写压力,提高访问速度,具体操作可在创建表的时候,通过DATA DIRECTORYINDEX DIRECTORY属性进行设置。
  2. 适用范围
    由于MyISAM不支持事务,不支持外键,访问速度快的特点,适用于以下特点的数据库:
    - 不要求事务完整性
    - 操作主要是查找SELECTINSERT
  3. 安全性
    MyISAM表中有一个标志,用于存储上次退出表是否是正常退出,每次启动该表之前会检查该标志,如果上次是异常退出,则考虑进行检查和修复。
    可使用CHECK TABLEREPAIR TABLE命令进行表的检查和修改。
  4. 支持的存储格式
    • 静态表:每个条目长度固定
    • 动态表:每个条目长度不固定
    • 压缩表:压缩存储,节省空间

三者的特点如下所示:
在这里插入图片描述

  1. 优缺点
    1. 优点:访问速度快,
    2. 缺点:不支持事务,不支持外键,不支持行级锁,不支持崩溃后的安全恢复,不支持并发插入(性能方面)

2. InnoDB

  1. 自动增长列
    指的是InnoDB支持用户手动插入的条目遵循索引项的自动增长,而不需要用户自己设置。

    然而,在InnoDB中,自动增长列必须是索引项,如果是组合索引,则是其中的第一列;而对于MyISAM,则可以是任意数据项。

    创建一个表之后,其自动增长列的起始值默认是1,也可以在创建表的时候进行修改:

    CREATE TABLE t1 (
        id INT NOT NULL AUTO_INCREMENT,
        name CHAR(30) NOT NULL,
        PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=某个起始数字;
    

    在插入条目的时候,也可以通过ALTER TABLE命令进行修改:

    ALTER TABLE 具体条目 AUTO_INCREMENT=某个起始数字;
    
  2. 外键约束

    • 在本文介绍的四个存储引擎中,只有InnoDB支持外键约束。
    • 外键约束可以指定数据表中,对父表的操作如何影响子表,具体参数如下:
      • restrict:父表的删除和更新不会对子表产生影响
      • cascade:级联操作,父表的删除和更新操作会影响子表,
      • set null:父表的删除和更新将会使得子表中相关条目设置为null
      • no action:效果等同于restrict,父表的删除和更新操作不会对子表产生影响。
    • 外键约束的开关
      根据set forgein_key_checks=0或者1的值,可以开启(值为1)或者关闭(值为0)外键约束。
  3. 优缺点

    1. 优点:支持回滚等事务处理
    2. 缺点:访问效率低,花费内存存储索引结构,占用内存较大

3. MEMORY

  1. 使用内存内容
    MEMORY表使用内存中的数据进行存储管理,因此,在使用期间需要足够的内存空间,当使用结束之后,需要进行内存释放,命令如下
    DROP FROM MEMORY 表名;
    TRUNCATE table 表名;
    
  2. hash结构
    MEMORY表的索引结构为hash,因此,有很快的访问速度,但是也引申出对于数据库操作指令的响应性能问题:
    • 相等比较:=<=>,性能较好
    • 范围比较:><BETWEENINLIKE,性能较差
    • 排序比较:order by,性能较差
      可通过改进为B树结构来提高性能
  3. 文件组成:
    使用内存中的数据来存储,只需要一个.frm文件,用于存储表结构定义。
  4. 固定长度存储
    创建该表的时候,需要设置固定长度,内部的条目长度固定,可设置最大行数来确定所需要的内存大小,max_heap_table_size参数用于设置最大行数。
    因此,对于TEXTBLOB等可变长度数据类型并不支持,但是对于VARCHAR数据类型,在实际的数据库操作中依然看作固定长度,因此可支持VARCHAR数据类型。
  5. 优缺点
    根据上文的分析,可得出MEMORY表的优缺点如下:
    • 优点: 访问速度快,使用hash存储对于相等比较操作性能良好,使用内存中的数据而不用额外生成新文件
    • 缺点: 只支持固定长度的数据条目,对于可变长度的数据类型不支持,且使用hash索引,对于范围、排序类的数据比较操作性能较差,需要额外释放内存。

4. MERGE

  1. 文件组成
    • .frm: 存储表的框架信息
    • .MRG:存储表的定义信息
  2. 具体操作
    Merge存储引擎相当于MyISAM的一个集合,需要多个表结构相同的MyISAM组合,本身并不存在数据,仅仅是一个结构,增删改查等操作还是需要对于具体的MyISAM表进行操作。
  3. 优缺点
    • 优点: 管理多个MyISAM表,方便操作
    • 缺点: 本身是多个MyISAM表的复合表,因此,MyISAM表的缺点都有。

5. 总结

对上述四种存储引擎进行比较,得出如下表格:
在这里插入图片描述

6. 参考博客

标签:文件,存储,简介,端面,支持,引擎,外键,MyISAM,MySQL
From: https://www.cnblogs.com/CrazyPixel/p/17470535.html

相关文章

  • SpringBoot+Mysql+IDEA开发的社区医疗综合服务平台
    基于springboot的社区养老医疗综合服务平台项目介绍......
  • ChatGLM简介和SSE聊天接口测试效果
    开发公司智谱AI是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型打造了ChatGLM(chatglm.cn)。此外,智谱AI还推出了认知大......
  • fiddler简介_2
    1、statistics按钮的使用2、inspectors按钮的使用3、autoresponder按钮......
  • Docker中拉取mysql后无法连接
    在Linux系统中,你可以使用以下命令停止MySQL服务:sudosystemctlstopmysql启动MySQL服务,并跳过权限验证:sudomysqld_safe--skip-grant-tables&在这个命令中,--skip-grant-tables参数将禁止MySQL对用户身份进行验证,因此你可以直接登录到MySQL服务器,而不需要输入......
  • Oracle数据库简介
    首先我们从最基础的什么是数据库开始,数据库(DataBase)就是能够长期存放数据的仓库,数据库具有永久储存、有组织和可共享三个基本特点。数据库管理系统(DBMS)是科学组织和储存数据,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性,高效地获取和维护数据的系统软件。本次介绍的......
  • MySQL安装
    一、MySQL在线方式安装检查自己的电脑是否已经安装MySQLyumlistinstalled|grepmysql(如果已经安装,存在安装记录,通过下面命令删除yum-yremove版本名称)mysql官网下载mysql-community的yum下载的rpm文件可以在使用centos中使用下面命令(wget从网上下载资源(网页,......
  • 备份mysql全量数据库为sql文件
    进入数据库bin目录,cmd运行mysqldump-utest-ptest--all-databases>all.sql 备注            -u后面接用户名 -p后面接密码  “>”是方向,这里指从左到右 备份结果:cmd命令行无提示错误即可, 备份结束的SQL文件才会显示文件大小,之前不显示......
  • Navicat、SQLyog第一次连接mysql8.0 1251错误
    引入:第一次连接mysql数据库时,报错1251代码错误,这是因为mysql8.0版本的加密规则是mysql_native_password,而在mysql8.0版本之后,加密规则是caching_sha2_password.解决首先,打开cmd命令行,按照一下步骤修改加密规则。连接上MYSQL数据库​ mysql-uroot-p.修改加密规则......
  • MYSQL常用函数总结
    目录一、数学函数计算绝对值小数取整数字精度处理随机数(0~1)计算数字符号获取圆周率计算次方计算开平方计算除法取余计算对数角度<=>弧度三角函数计算进制转换二、字符串函数字符串长度字符拼接字符串大小写转换字符串截取复杂截取指定位置与长度的字符替换字符串替换字符串填充......
  • 配置SQLDeveloper连接mysql时报错Message from server:”host ‘****’ is not allowe
    问题描述:配置SQLDeveloper连接mysql时报错Messagefromserver:”host‘****’isnotallowedtoconnecttothismysqlserver”,如下所示:数据库:mysql8.0.27SQLDeveloper版本:23.1.0.097连接mysql使用的驱动文件:mysql-connector-j-8.0.33.jar1、异常重现2、解决过程[root......