前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL:引擎知识点盘点

MySQL:引擎知识点盘点

作者头像
栗筝i
发布2022-12-01 20:48:34
2330
发布2022-12-01 20:48:34
举报
文章被收录于专栏:迁移内容迁移内容

本篇内容包括:MySQL 引擎简介、InnoDB与MyISAM存储引擎之间的比较以及其他常用引擎。

一、MySQL 引擎简介

存储引擎是数据库的核心,MySQL的存储引擎架构被设计为可插拔式架构模式,也就是在不影响任何业务逻辑的情况下,我们可以随时替换当前的存储引擎,以达到以存储和性能方面的需求。

MySQL的Server层与存储引擎层通过MySQL服务器提供统一的API接口与存储引擎进行交互,Server不关心底层存储引擎的实现细节,而不同的存储引擎对数据的存储与处理、查询都有自己的实现。

虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种:MyISAM、InnoDB、MEMORY、ARCHIVE

查看存储引擎:MySQL支持多种存储引擎,如果我们想查看自己的MySQL服务器支持多少种存储引擎,可以使用SHOW ENGINES命令进行查询,如:mysql> SHOW ENGINES;

1、InnoDB

InnoDB存储引擎在 MySQL5.6 版本以上被作为默认引擎,支持行级锁定、MVCC 多版本控制、非锁定读、事务、外健等特性,对事务的支持,让 MySQL 成为更加完善的数据库管理系统系统,行级锁定使 InnoDB 可以支持更大的并发数。

一般来说,如果没有什么其他特殊的需求,InnoDB 存储引擎是使用 MySQL 创建数据表的首选。

2、MyISAM

在 MySQL5.1 以前,MyISAM 存储引擎是 MySQL 是默认存储引擎,MyISAM 支持表级锁定,并不支持事务,比较适合大量的select和insert操作。


二、InnoDB与MyISAM存储引擎之间的比较

1、事务的支持

InnoDB 支持 ACID 的事务处理,MyISAM 并不支持事务,这里需要注意,如果我们在程序需要进行事务处理,所有的数据都要使用Innodb存储引擎,如果中间有MyISAM存储引擎的数据表,如果进行事务回滚,MyISAM并不会回滚到之前的状态,因此MyISAM不支持事务。

2、索引与主键处理

InnoDB 存储引擎使用的是聚集索引,InnoDB 主键的叶子节点是该行的数据,而其他索引则指向主键,而 MyISAM 存储引擎使用的是非聚集索引,主键与其他索引的叶子节点都存储了指向数据的指针。

另外一个是MyISAM数据表允许没有主键和其他索引,而InnoDB数据表如果没有主键的话,而会生成一个用户不可见6字节的主键。

3、外键

MyISAM不支持外键,而Innodb则支持建立数据表之间的外键关联。

4、存储文件的不同

Innodb 存储文件有 frm、ibd,而 MyISAM 是 frm、MYD、MYI,Innodb 存储文件中 frm 是数据表结构定义文件,ibd 是数据文件,MyISAM中frm是数据表结构定义文件,MYD是数据的文件,MYI则是存储索引的文件。

5、select count(*)

使用 MyISAM 存储引擎的数据表会记录一个数据表的总行数,所以对使用MyISAM存储引擎的数据表进行select count(*),可以很快得到一个数据表的总行数,而对于InnoDB存储引擎的数据表,想要查询总行数需要进行全表扫描才能得到。

6、锁的级别

InnoDB 支持行级锁,而 MyISAM 只支持表级锁,因此 InnoDB 更能支持高并发。


三、其他常用引擎

1、MEMORY

MEMORY:使用 MEMORY 引擎主要是因为速度,好处就在 MEMORY 采用的逻辑存储是系统内存,极大的提高了储存数据表的性能;

坏处就是当 mysqld 守护进程崩溃时,所有的 Memory 数据都会丢失。

要求存储在 Memory 数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型

所以一般在以下几种情况下使用Memory存储引擎:

  1. 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数 max_heap_table_size 控制 Memory 表的大小,设置此参数,就可以限制 Memory 表的最大大小。
  2. 如果数据是临时的,而且必须立即使用,那么就可以存放在内存表中。
  3. 存储在 Memory 表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

Memory 同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在 order by 子句中

2、MERGE

MERGE 存储引擎是一组 MyISAM 表的组合,这些 MyISAM 表结构必须完全相同,所以就相当于一个集合器。比起其他储存引擎MERGE 不是很优秀,但是在某些情况下 MERGE 还是非常的有用。对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。

3、ARCHIVE

Archive 是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在 MySQL 5.5 版以前,Archive 是不支持索引,但是在 MySQL 5.5 以后的版本就开始支持索引了。Archive 拥有很好的压缩机制,它使用 zlib 压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MySQL 引擎简介
  • 二、InnoDB与MyISAM存储引擎之间的比较
  • 三、其他常用引擎
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档