当前位置: 首页 > news >正文

MySQL之常用存储引擎

存储引擎

文章目录

    • 存储引擎
      • 类型
      • MyISAM
      • InnoDB
      • Memory
      • 修改
      • 选择

  • 描述表的存储方式

    • MySQL 中叫做 存储引擎
    • Oracle 叫做 存储方式
  • MySQL 表的类型由存储引擎(storage engines)决定

    • 主要使用:MyISAMinnoDBMemory
    • 查看所有存储引擎:show engines
    • 默认引擎:InnoDB

类型

  • 不同版本支持存储引擎不同

    • InnoDB:默认使用
    • MRG_MYISAMMEMORYBLACKHOLEMyISAMCSVARCHIVEPERFORMANCE_SCHEMAFEDERATED
  • 分为两类

    • 事务安全型(transaction-safe)
      • InnoDB:只有这一个
    • 非安全事务型
      • 其他所有类型
      • 如:MySIAN 和 Memory
    特点MyISAMInnoDBMemoryARCHIVE
    批量插入速度非常高
    事务安全支持
    锁机制表锁行锁表锁行锁
    存储限制64TB
    全文索引支持
    B树索引支持支持支持
    哈希索引支持支持
    集群索引支持
    数据缓存支持支持
    索引缓存支持支持支持
    数据压缩支持支持
    空间使用N / A非常低
    内存使用中等
    支持外键支持

MyISAM

  • 特点

    1. 访问速度快,对事务完整性无要求
    2. 不支持事务和外键
    3. 支持表级锁
  • 可转为压缩、只读表来节省空间

  • 使用三个文件表示一张表

    • 格式文件 :存储表结构的定义
      • mytable.frm
    • 数据文件:存储表中数据
      • mytable.MYD
    • 索引文件:存储表上索引
      • mytable.MYI
      • 仅保存记录所在页的指针,索引结构:B+ 树
  • 灵活的 AUTO_INCREMENT 字段处理

InnoDB

  • MySQL 5.1 开始成为默认引擎
  • 主要特征
    1. 提供具有提交、回滚和崩溃恢复能力的事务安全
      • 默认隔离级别:可重复读,通过 MVCC 实现
    2. MySQL 服务器崩溃后提供自动恢复
      • 多版本 MVCC、行级锁
    3. 支持外键及引用完整性约束
      • 包括级联删除和更新
        • 降低了表的查询速度,增加了表之间的耦合度
      • 没有显式定义主键时默认为每一行生成一个 6 字节的 ROWID 作为主键
    4. 可以通过自动增长列:auto_increment
    5. 为处理巨大数据量的最大性能设计
    6. 存在缓冲管理
      • 通过缓冲池将索引和数据全部缓存,加快查询速度
    7. 被用在需要高性能的大型数据库站点
    8. 锁粒度为行级锁,支持更高级别并发
  • 比 MyISAN 的处理效率差一些
    • 且会占用更多的磁盘空间以保留数据和索引
  • InnoDB 文件在数据库目录中以 .frm 格式文件表示
  • InnoDB 表空间 tablespace 用于存储表的内容
  • 提供一组用来记录事务性活动的日志文件

Memory

以前被称为 HEAP 引擎

  1. 数据、索引 存储在内存中
    • 访问速度非常快,默认使用 hash 索引
    • mysql 服务关闭表中数据就会丢失
      • 表结构还在
  2. 表级锁机制
  3. 不支持 textblob 等数据类型
    • 只支持定长字符串,varchar 会自动存储为 char 类型
  4. 用内存中的内容来创建表,每个 memory 表只实际对应一个磁盘文件
    • 数据库目录中每个表均以 .frm 格式文件表示
  5. 在临时表中使用
    • 不需要存放在磁盘且需要经常操作的
      • 例如:用户状态表
    • 若临时表中有 blob、text 类型字段则临时表会转为 MyISAM 类型
      • 性能急剧降低

修改

-- 修该存储引擎,或在创建表时指定
alter table `table_name` engine = 存储引擎 

选择

  • 不需要事务,只处理基本的CRUD操作
    • MyISAN 速度快
  • 需要支持事务:InnoDB
  • 不需要存储在磁盘且操作频繁;例如:用户在线状态等
    • Memory,存储在内存中
    • 没有磁盘 IO 的等待,速度极快
    • 但由于存储在内存中,数据在服务器关闭后都会丢失

相关文章:

  • 动手学习深度学习 02:预备知识
  • dockerkubernets篇(二十六)
  • 9.synchronized的三把锁
  • 为什么开发人员正在成为供应链攻击中的最薄弱环节
  • MySQL之事务、锁
  • 项目第二天
  • Windows与网络基础-10-windows用户管理
  • 计算机网络笔记(王道考研) 第三章:数据链路层
  • apifox 提取cookie字段添加自动鉴权
  • ATF启动(一):整体启动流程
  • 25. Python 字符串的切片方法
  • 接口测试自动化脚本框架4
  • HadoopSpark
  • 51单片机4位抢答器_倒计时可调仿真设计
  • 设计模式之模板方法模式的理解
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • co.js - 让异步代码同步化
  • CSS居中完全指南——构建CSS居中决策树
  • docker容器内的网络抓包
  • github从入门到放弃(1)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 多线程编程之:notify 和 wait 用法
  • Java读取Properties文件的六种方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • Spring声明式事务管理之一:五大属性分析
  • WebSocket使用
  • yii2权限控制rbac之rule详细讲解
  • 使用API自动生成工具优化前端工作流
  • 协程
  • 一个JAVA程序员成长之路分享
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # .NET Framework中使用命名管道进行进程间通信
  • # C++之functional库用法整理
  • #单片机(TB6600驱动42步进电机)
  • (5)STL算法之复制
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (k8s中)docker netty OOM问题记录
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (分布式缓存)Redis分片集群
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (接口封装)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)linux下的时间函数使用
  • (转)用.Net的File控件上传文件的解决方案
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .chm格式文件如何阅读
  • .net 提取注释生成API文档 帮助文档
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)