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

简介: 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应用场景:字典管理(不需要事务)、多查询。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
7月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
399 17
|
11月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
731 81
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
358 6
|
12月前
|
存储 缓存 关系型数据库
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
2019 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
|
9月前
|
存储 关系型数据库 MySQL
MYSQL支持的存储引擎有哪些, 有什么区别
MYSQL存储引擎有很多, 常用的就二种 : MyISAM和InnerDB , 者两种存储引擎的区别 ; ● MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储 ● MyISAM 不支持事务 , InnerDB支持事务 ● MyISAM 不支持外键 , InnerDB支持外键
|
12月前
|
存储 关系型数据库 MySQL
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
536 7
|
存储 SQL 关系型数据库
MySQL存储引擎
本文介绍了数据库优化的多个方面,包括选择合适的存储引擎、字段定义原则、避免使用外键和触发器、大文件存储策略、表拆分及字段冗余处理等。强调了从业务层面进行优化的重要性,如通过活动设计减少外部接口调用,以及在高并发场景下的流量控制与预处理措施。文章还提供了具体的SQL优化技巧和表结构优化建议,旨在提高数据库性能和可维护性。
384 1
MySQL存储引擎
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
408 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
243 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
存储 缓存 关系型数据库
【赵渝强老师】MySQL的MyISAM存储引擎
在MySQL5.1版本之前,默认存储引擎为MyISAM。MyISAM管理非事务表,提供高速存储和检索,支持全文搜索。其特点包括不支持事务、表级锁定、读写互阻、仅缓存索引等。适用于读多、写少且对一致性要求不高的场景。示例代码展示了MyISAM存储引擎的基本操作。
137 1

推荐镜像

更多