首页 > 数据库 >2.MySQL存储引擎

2.MySQL存储引擎

时间:2023-09-18 21:59:42浏览次数:40  
标签:存储 支持 引擎 InnoDB MyISAM MySQL

MySQL有Server层和存储引擎层,存储引擎层为插件式实现,redo log为InnoDB独有。

1.MySQL 支持哪些存储引擎?默认使用哪个?

  所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。

 

2.MySQL 存储引擎架构了解吗?

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

  可以根据 MySQL 定义的存储引擎实现标准接口来编写一个属于自己的存储引擎。这些非官方提供的存储引擎可以称为第三方存储引擎,区别于官方存储引擎。像目前最常用的 InnoDB 其实刚开始就是一个第三方存储引擎,后面由于过于优秀,其被 Oracle 直接收购了。

  MyISAM 不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。

 

3.MyISAM和InnoDB的区别:

  行级锁:MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。

  事务:InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别,具有提交(commit)和回滚(rollback)事务的能力。并且,InnoDB 默认使用的 REPEATABLE-READ(可重读)隔离级别是可以解决幻读问题发生的(基于 MVCC 和 Next-Key Lock)。

  外键:MyISAM 不支持,而 InnoDB 支持。(外键是某个表中的一列,它包含在另一个表的主键中。 外键也是索引的一种,是通过一张表中的一列指向另一张表中的主键,来对两张表进行关联。 一张表可以有一个外键,也可以存在多个外键)

外键对于维护数据一致性非常有帮助,但是对性能有一定的损耗。因此,通常情况下,我们是不建议在实际生产项目中使用外键的,在业务代码中进行约束即可!

  是否支持数据库异常崩溃后的安全恢复MyISAM 不支持,而 InnoDB 支持。

使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log 。

  是否支持 MVCCMyISAM 不支持,而 InnoDB 支持。

 MyISAM 连行级锁都不支持。MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提高性能。

  索引实现不一样虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是两者的实现方式不太一样。

InnoDB 引擎中,其数据文件本身就是索引文件。相比 MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按 B+Tree 组织的一个索引结构,树的叶节点 data 域保存了完整的数据记录。

  性能差别:InnoDB 的性能比 MyISAM 更强大,不管是在读写混合模式下还是只读模式下,随着 CPU 核数的增加,InnoDB (因为支持并发)的读写能力呈线性增长。MyISAM 因为读写不能并发,它的处理能力跟核数没关系。

 

4.MyISAM和InnoDB如何选择:

  大多数时候我们使用的都是 InnoDB 存储引擎,在某些读密集(以读取为主)的情况下,使用 MyISAM 也是合适的。某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择 MyISAM 也是一个不错的选择。

标签:存储,支持,引擎,InnoDB,MyISAM,MySQL
From: https://www.cnblogs.com/cjhtxdy/p/17713138.html

相关文章

  • 3.MySQL索引
    1.索引:是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。常见的索引结构有:B树,B+树和Hash、红黑树。在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作为索引结构。2.索引优缺点:优点:使用索引可以大大加快数据的检索速度(大大减少检索的数......
  • MYSQL SQL做题总结
    一.关于join1.内外左右连接2.交叉联结(corssjoin)使用交叉联结会将两个表中所有的数据两两组合。如下图,是对表“text”自身进行交叉联结的结果:3.三表双双连接力扣题目a与b表笛卡尔积,再与c表左连接。SELECTa.student_id,a.student_name,b.subject_name,count(c.subject......
  • MySQL主从复制原理
    一张图让你牢记MySQL主从复制原理|原创(qq.com)为什么需要主从复制?1、读写分离,增强MySQL数据库的可用性。2、做数据的热备。3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。说说BinlogMySQL的Server......
  • MySQL三大日志(binlog、redo log和undo log)详解
    硬核干货!一文掌握binlog、redolog、undolog(qq.com)MySQL日志:undolog、redolog、binlog(qq.com)MySQL三大日志(binlog、redolog和undolog)详解|JavaGuide(Java面试+学习指南)MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其......
  • 1.MySQL、基础架构(SQL语句执行流程、更新语句执行流程)
    1.MySQL的索引有哪些索引在什么层面:索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。B+树索引:是大多数MySQL存储引擎的默认索引类型。哈希索引:哈希索引能以O(1)时间进行查找,但是失去了有序性;InnoDB存储引擎有一个特殊的功能叫......
  • MySQL事务隔离级别详解
    MySQL事务隔离级别详解|JavaGuide(Java面试+学习指南)事务隔离级别总结SQL标准定义了四个隔离级别:READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交):允许读取并发事务已经提交的数......
  • Linux离线安装Mysql-5.7
    1、背景描述在真实业务场景下,Linux服务器一般位于内网,所以无法直接访问互联网资源;特别是安装数据库的Linux服务器,在网络方面的管控只会更加严格;因此,需要提前下载好相关资源,再传输到内网Linux服务器进行安装;2、下载Mysql的安装包下载地址:https://dev.mysql.com/downl......
  • 如何快速从 ETL 到 ELT?火山引擎 ByteHouse 做了这三件事
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群前言当涉及到企业分析场景时,所使用的数据通常源自多样的业务数据,这些数据系统大多采用以行为主的存储结构,比如支付交易记录、用户购买行为、传感器报警等。在数仓及分析领域,海量数据则主要采按列......
  • 无法访问MySQL,错误代码1045 (28000): 用户'bill'@'localhost'被拒绝访问
    这个错误通常是由于权限设置不正确或者密码错误导致的。你可以尝试以下解决方案来解决这个问题:确保密码输入正确:在输入密码时要注意区分大小写,确保将正确的密码输入。检查用户权限:使用root用户登录MySQL,执行以下命令来查看用户bill的权限:SHOWGRANTSFOR'bill'@'localhost';确认用......
  • 如何快速从 ETL 到 ELT?火山引擎 ByteHouse 做了这三件事
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 前言当涉及到企业分析场景时,所使用的数据通常源自多样的业务数据,这些数据系统大多采用以行为主的存储结构,比如支付交易记录、用户购买行为、传感器报警等。在数仓及分析领域,海量数据则主......