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

♡ — MySQL 存储引擎

MySQL 存储引擎架构

  • MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要;
  • 存储引擎是基于表的,而不是数据库。

MyISAMInnoDB 的区别

  • MySQL 5.5 之前,MyISAM 引擎是 MySQL 的默认引擎;
  • MySQL 5.5 之后,InnoDB 引擎是 MySQL 的默认引擎。

两者对比:

  • 是否支持行级锁
    • MyISAM 只有表级锁( table-level locking )
    • InnoDB 支持行级锁 ( row-level locking ) 和表级锁,默认为行级锁
    • 也就是说,MyISAM 一锁就是锁住了整张表,这在并发写的情况下是有问题的!而 InnoDB 在并发写的时候,性能更高。
  • 是否支持事务
    • MyISAM 不支持事务;
    • InnoDB 支持事务,实现了 SQL 标准,定义了四个隔离级别,具有提交 ( commit ) 和 回滚 ( rollback ) 事务的能力。并且,InnoDB 默认使用 的 repeatable-read ( 可重读 ) 隔离级别是可以解决幻读问题发生的(基于 MVCCNext-Key Lock
  • 是否支持外键
    • MyISAM 不支持外键;InnoDB 支持外键
    • 外键对于维护数据一致性非常有帮助,但是对性能有一定的损耗。因此,通常情况下,我们是不建议在实际生产项目中使用外键的,在业务代码中进行约束即可!(具体依据项目情况而定!)
  • 是否支持数据库异常崩溃后的安全恢复
    • MyISAM 不支持;InnoDB 支持。
    • 使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。此恢复过程依赖于 redo log
  • 是否支持 MVCC
    • MyISAM 不支持;InnoDB 支持。
    • MVCC 可以看作行级锁的一个升级,可以有效减少加锁操作,提高性能。
  • 索引实现不一样
    • MyISAMInnoDB 都是使用 B+ Tree 作为索引结构,但是两者的实现方式不太一样。
    • MyISAM 中,索引文件和数据文件是分离的,其表数据文件本身就是按 B+ Tree 组织的一个索引结构,树的节点 data 域保存了完整的数据记录。
  • 性能有差别
    • InnoDBMyISAM 性能更加强大,不管是在读写混合模式下还是只读模式下,随着 CPU 的增加,InnoDB 的读写能力呈线性增长;
    • MyISAM 因为读写不能并发,它的处理能力跟核数没有关系。

总结:

  • InnoDB 支持行级别的锁粒度;MyISAM 不支持,只支持表级别的锁粒度。
  • MyISAM 不提供事务支持;InnoDB 提供事务支持,实现了 SQL 标准,定义了四个隔离级别。
  • MyISAM 不支持外键;InnoDB 支持外键。
  • MyISAM 不支持 MVCCInnoDB 支持 MVCC
  • 虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+ Tree 作为索引结构,但是两者的实现方式不太一样。
  • MyISAM 不支持数据库异常崩溃后安全恢复;InnoDB 支持。
  • InnoDBMyISAM 性能更强大。
http://www.lryc.cn/news/5581.html

相关文章:

  • 大数据技术架构(组件)34——Spark:Spark SQL--Optimize
  • Zookeeper实现分布式锁
  • MFC 添加重新启动管理器支持
  • 一文带你深刻的进入Python,并且了解Python的优缺点
  • 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)
  • 编译原理—翻译方案、属性栈代码
  • 链表
  • CSS 样式优先级
  • SpingMVC获取请求参数
  • 微搭使用笔记(二)微搭低代码平台介绍及基础使用
  • CountDownLatch的定义、使用 、原理
  • 《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
  • 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)
  • Linux 删除修改日期大于某一天的文件
  • 【算法题】1845. 座位预约管理系统
  • 【专业认知】保研北大金融 / 入职腾讯产品经理
  • OpenHarmony使用Socket实现一个UDP客户端详解
  • 使用VUE自定义组件封装部门选择功能
  • C语言基础应用(一)数据类型
  • 算法笔记(三)—— 桶排序及排序总结
  • Linux入门篇(一)
  • HTTPSHandler SSL Error
  • 基于Android的高校食堂餐厅配送系统
  • Java设计模式-02工厂模式
  • AXI-Lite 学习笔记
  • 77页智慧城市顶层设计方案
  • JavaWeb--MavenMybatis基础
  • 博客系统--测试用例编写
  • SpringCloud Alibaba
  • 地平线slam算法岗位 面试分享