常用mysql引擎及工作原理_了解MySQL存储引擎工作原理

news/2024/7/7 8:21:04

MySql数据库最大的特色就是其插件式的存储引擎架构,本文主要介绍MySql常用的存储引擎,为开发时选择合适的存储引擎提供参考。

1. MySql体系结构#

在介绍存储引擎之前先来介绍下MySql的体系结构,以便大家知道存储引擎在MySql整个体系中处于什么位置。下图是官方提供的一张架构图:

f71dc42a5cffa8548fdae5ad22891e63.png

MySQL体系结构图

从上图可以发现,MySQL由以下几部分组成:

连接池组件

管理服务和工具组件

SQL接口组件

查询分析器组件

优化器组件

缓冲(Cache)组件

插件式存储引擎

物理文件

MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎,从上图中也可以看到,MySql支持很多种存储引擎。需要特别注意的是,存储引擎是基于表的,而不是数据库。

2. MySql存储引擎#

插件式存储引擎的好处是:能够根据具体的应用的特点选择不同的存储引擎。下面是几种MySQL常用的存储引擎。

2.1 InnoDB存储引擎#

InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。

InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为REPEATABLE级别。同时,使用一种被称为next-key locking的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB储存引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。

对于表中数据的存储,InnoDB存储引擎采用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

2.2 MyISAM存储引擎#

MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用。此外,MyISAM存储引擎的另一个与众不同的地方是它的缓冲池只缓存(cache)索引文件,而不缓冲数据文件,这点和大多数的数据库都非常不同。从MySQL 5.0版本开始,MyISAM默认支持256TB的单表数据,这足够满足一般应用需求。

2.3 Memory存储引擎#

Memory存储引擎(之前称HEAP存储引擎)将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。它非常适合用于存储临时数据的临时表,以及数据仓库中的纬度表。Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。

虽然Memory存储引擎速度非常快,但在使用上还是有一定的限制。比如,只支持表锁,并发性能较差,并且不支持TEXT和BLOB列类型。最重要的是,存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存。

此外有一点容易被忽视,MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集(intermediate result)。如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中。之前提到MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

2.4 Archive存储引擎#

Archive存储引擎只支持INSERT和SELECT操作,从MySQL 5.1开始支持索引。Archive存储引擎使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可达1∶10。正如其名字所示,Archive存储引擎非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。

当然MySql还支持很多其他的存储引擎,这边不一一列举了。

3. 存储引擎对比整理

存储引擎可以理解为表的存储结构,每种存储引擎都支持不同的特性。MySQL支持插件式的存储引擎,可以为每张数据表指定不同的存储引擎。常用的存储引擎的特点整体如下:

b2eec150bd97c37188a712fc68be20b1.png

我们也可以使用下面命令查看当前数据库支持哪些存储引擎:

Copy

-- 查看支持的存储引擎

show engines;

下面对最常用的三种存储引擎做下简单总结介绍:

InnoDB:MySQL默认的存储引擎,支持事务、支持行级锁和表级锁、支持各类索引、支持外键,高版本的MySQL还支持全文索引,但是批量数据插入的效率较低;

MyISAM:具有较高的数据插入效率和数据查询速度,支持全文索引,但是不支持数据库事务,不支持行级锁,只支持表级锁;

MEMORY:使用这个存储引擎时,会将表中的数据加载到内存中,查询很快,但是对内存要求较高。

所以我们应该根据应用的具体需求选择合适的存储引擎,而不是不加思考的都选择默认存储引擎(INNODB)。

如果要提供提交、回滚和恢复的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个很好的选择。如果数据表主要用来插入和查询记录,则MyISAM引擎提供较高的处理效率。如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的MEMORY引擎中,MySQL中使用该引擎作为临时表,存放查询的中间结果。如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive存储引擎非常适合存储归档数据,如记录日志信息可以使用Archive引擎。


http://www.niftyadmin.cn/n/1999905.html

相关文章

postman提取返回值_postman 上一个接口的返回值作为下一个接口的入参

在使用postman做接口测试的时候,在多个接口的测试中,如果需要上一个接口的返回值作为下一个接口的入参,其基本思路是:1、获取上一个接口的返回值2、将返回值设置成环境变量或者全局变量3、设置下一个接口的参数形式列子&#xff1…

36 永安托孤

36 永安托孤  刘备在弥留之际把自己的儿子刘禅托付给诸葛亮,这就是著名的“永安托孤”,后人常把这看作是刘备的忠厚和对诸葛亮的信任。可是也有人认为,这是刘备的狡诈,是为了防止诸葛亮专权、篡权,而给诸葛亮套上的…

centos 软件安装的三种方式

Linux下面安装软件的常见方法: 1.yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决 1).方便 简单2)没有办法深入修改 yum install -y tree 2.rpm 自己下载软件包 自己安装 自己解决依赖 半成品 缺少的东西 自己解决1)安装 解决依赖复杂 rpm -ivh treex…

python装饰器应用论文_python 装饰器之应用示例

import timeimport hashlibimport pickleimport threading#装饰函数缓存应用cache {}def is_obsolete(entry,duration):return time.time() - entry[time]>durationdef compute_key(function,args,kw):key pickle.dumps((function.__name__,args,kw))return hashlib.sha1(k…

noip欢乐赛10.24 分火腿

分火腿 题目描述: 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿。为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份。请问最少要切几刀&a…

mbr mysql_mbr是什么?

MBR即主引导记录,全称Main Boot Record,是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。通常,我们将…

(六)easyUI之对话框窗口

一、拥有HTML的对话框 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><%String pathrequest.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q…

诸葛亮是刘备最器重的人才么

诸葛亮是刘备最器重的人才么 近来&#xff0c;对诸葛亮军事才能的评论比较多。有的认为诸葛亮军事才能不高&#xff0c;于演义和历史上对其的评价相差甚远&#xff1b;还有的则认为诸葛亮不愧为伟大的军事家。本文从另一个角度来分析一下诸葛亮的军事才能&#xff0c…