栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
  • 前言
  • 一、介绍存储引擎
    • 1.1、InnoDB引擎
    • 1.2、MyISAM引擎
  • 二、InnoDB与MyISAM的对比
  • 三、不同的场景选择引擎

前言

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

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

一、介绍存储引擎 1.1、InnoDB引擎

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

  1. 支持事务,其默认事务级别为RR(Repeatable read,可重复读),通过MVCC(并发版本控制)实现。
  2. 使用锁粒度是行级锁,可以支持更高的并发。
  3. 支持外键。
  4. 在InnoDB中存在缓冲管理,通过缓冲池将索引和数据全部缓存起来,能够加快查询的速度。
  5. 对于InnoDB类型的表,其数据的物理组织形式是聚簇表,所以的数据按照主键来组织。数据和索引放在一块,位于B+树的叶子节点上。


1.2、MyISAM引擎

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

  1. 不支持事务。
  2. 不支持外键,如果强行增加外键,不会提示错误,但是外键会无效。
  3. 对数据的查询缓存只会缓存索引,不会像InnoDB一样缓存数据,而是利用操作系统本身的缓存。
  4. 默认的锁粒度是表级锁,所以并发度很差,加锁快,锁冲突较少,所以不太容易出现死锁。
  5. 支持全文索引(5.6版本以后,InnoDB存储引擎也对全文索引做了支持),但是MySQL的全文索引基本不会使用,对于全文索引,现如今在Java层面有许多成熟的解决方案,如ElasticSearch,Solr,Sphinx。
  6. 数据库的主机如果宕机,MyISAM的数据文件容易损坏,而且难恢复。


二、InnoDB与MyISAM的对比
  1. 由于锁粒度不同,InnoDB比MyISAM支持更高的并发。
  2. InnDB为行级锁,MyISAM为表级锁。InnoDB相对于MyISAM来说更容易发生死锁,锁冲突的概率大,而且上锁的开销更大,需要为每一行加锁。
  3. 在备份容灾上,InnoDB支持在线热备,有很成熟的在线热备解决方案。
    • 热备:一般运行,数据能够一边备份。冷备:需要让它停止下来进行备份。
  4. 在查询性能上来看,MyISAM的查询效率高于InnoDB,因为InnoDB在查询过程中是需要维护数据缓存,而且查询过程中是先定位到行所在的数据块,然后再从数据块中定位到要找到的行;而MyISAM可以直接定位到数据所在的内存地址,可以直接找到数据。
  5. 查询表记录总数量(select count(*))上MyISAM比InnoDB能够更快的查询。如果行数在千万级别上,MyISAM可以快速查出,而InnoDB查询的特别慢,因为MyISAM将行数单独存储了,而InnoDB需要逐行去统计行数;如果使用InnoDB,并且频繁需要查询行数时,需要对行数进行特殊处理,例如:离线查询并缓存,在Java层面查询一次之后存储到Map对象里(存储到内存中)。
  6. MyISAM与InnoDB的表数据文件各不相同。MyISAM有三个表文件:.frm(表结构定义)、.MYI(索引)、.MYD(数据);而InnoDB的表数据文件为:.idb(数据与缓存)和.frm(表结构)。

不同引擎的表文件如下:

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

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

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



三、不同的场景选择引擎

不同场景需求介绍:

  1. 根据场景是否需要事务支持?需要选择InnoDB。
  2. 是否需要支持高并发?需要选择InnoDB。
  3. 是否需要外键?需要选择InnoDB。
  4. 是否需要高效缓冲数据?InnoDB对数据与索引都做了缓冲,而MyISAM只缓冲了索引。
  5. 对于索引采用的数据结构选择?InnoDB选择B+树作为存储数据与索引。MyISAM则是选择哈希。

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

我是长路,感谢你的耐心阅读。如有问题请指出,我会积极采纳!
欢迎关注我的公众号【长路Java】,分享Java学习文章及相关资料
Q群:851968786 我们可以一起探讨学习
注明:转载可,需要附带上文章链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号