MySQL学习笔记 03、MySQL存储引擎

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL学习笔记 03、MySQL存储引擎

前言


本篇博客是MySQL的学习笔记,若文章中出现相关问题,请指出!


所有博客文件目录索引:博客目录索引(持续更新)


一、介绍存储引擎


1.1、InnoDB引擎


在MySQL5.5版本后,MySQL的默认内置存储引擎已经是InnoDB引擎了,主要特点如下:


支持事务,其默认事务级别为RR(Repeatable read,可重复读),通过MVCC(并发版本控制)实现。

使用锁粒度是行级锁,可以支持更高的并发。

支持外键。

在InnoDB中存在缓冲管理,通过缓冲池将索引和数据全部缓存起来,能够加快查询的速度。

对于InnoDB类型的表,其数据的物理组织形式是聚簇表,所以的数据按照主键来组织。数据和索引放在一块,位于B+树的叶子节点上。


1.2、MyISAM引擎


在5.5版本之前,MyISAM是MySQL的默认存储引擎,该存储引擎并发性差,不支持事务,使用的场景较少,特点如下:


不支持事务。

不支持外键,如果强行增加外键,不会提示错误,但是外键会无效。

对数据的查询缓存只会缓存索引,不会像InnoDB一样缓存数据,而是利用操作系统本身的缓存。

默认的锁粒度是表级锁,所以并发度很差,加锁快,锁冲突较少,所以不太容易出现死锁。

支持全文索引(5.6版本以后,InnoDB存储引擎也对全文索引做了支持),但是MySQL的全文索引基本不会使用,对于全文索引,现如今在Java层面有许多成熟的解决方案,如ElasticSearch,Solr,Sphinx。

数据库的主机如果宕机,MyISAM的数据文件容易损坏,而且难恢复。


二、InnoDB与MyISAM的对比


由于锁粒度不同,InnoDB比MyISAM支持更高的并发。

InnDB为行级锁,MyISAM为表级锁。InnoDB相对于MyISAM来说更容易发生死锁,锁冲突的概率大,而且上锁的开销更大,需要为每一行加锁。

在备份容灾上,InnoDB支持在线热备,有很成熟的在线热备解决方案。

热备:一般运行,数据能够一边备份。冷备:需要让它停止下来进行备份。

在查询性能上来看,MyISAM的查询效率高于InnoDB,因为InnoDB在查询过程中是需要维护数据缓存,而且查询过程中是先定位到行所在的数据块,然后再从数据块中定位到要找到的行;而MyISAM可以直接定位到数据所在的内存地址,可以直接找到数据。

查询表记录总数量(select count(*))上MyISAM比InnoDB能够更快的查询。如果行数在千万级别上,MyISAM可以快速查出,而InnoDB查询的特别慢,因为MyISAM将行数单独存储了,而InnoDB需要逐行去统计行数;如果使用InnoDB,并且频繁需要查询行数时,需要对行数进行特殊处理,例如:离线查询并缓存,在Java层面查询一次之后存储到Map对象里(存储到内存中)。

MyISAM与InnoDB的表数据文件各不相同。MyISAM有三个表文件:.frm(表结构定义)、.MYI(索引)、.MYD(数据);而InnoDB的表数据文件为:.idb(数据与缓存)和.frm(表结构)。

不同引擎的表文件如下:


①在InnoDB中,一个表一般由.ibd(数据及索引)以及.frm(存储表信息)组成,分别存放表结构以及表数据。



注意:MySQL8.0中没有.frm呢,直接存储到InnoDB引擎中去了。

②在MyISAM引擎中,一个表由三个文件组成.frm、.MYD(mydata)、.MYI(myindex)




三、不同的场景选择引擎


不同场景需求介绍:


根据场景是否需要事务支持?需要选择InnoDB。

是否需要支持高并发?需要选择InnoDB。

是否需要外键?需要选择InnoDB。

是否需要高效缓冲数据?InnoDB对数据与索引都做了缓冲,而MyISAM只缓冲了索引。

对于索引采用的数据结构选择?InnoDB选择B+树作为存储数据与索引。MyISAM则是选择哈希。

MyISAM应用场景:字典管理(不需要事务)、多查询。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
4月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
29 0
|
2月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
49 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
2月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
67 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
31 6
|
2月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
33 4
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
25 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
28 0
|
4月前
|
存储 关系型数据库 MySQL
下一篇
无影云桌面