详解InnoDB——综述

简介: 详解InnoDB——综述

从 mysql-5.5 开始innodb作为默认的存储引擎了 ,是最重要使用最广泛的存储引擎,它被设计用来处理大量的短期事务,短期事务大部分是正常提交的,也会被回滚,InnoDB的性能和自动崩溃恢复特性(基于redo log实现的crash-safe),使得在非事务型存储的需求中也非常流行

mysql分为客户端、Server层、存储引擎,存储引擎除非非常特殊的原因,否则优先考虑InnoDB

概述

InnoDB采用MVCC来支持高并发,并且实现了4个标准的蛤蜊级别,默认级别是REPEATABLE READ(可重复读),并且使用间隙锁(next-key locking)策略放置幻读的出现,使InnoDB不仅仅锁定查询的行,还会对索引中的间隙进行锁定,以防止幻影行的插入

InnoDB是基于聚簇索引建立的,聚簇索引对主键查询有很大作用,二级索引中包含的列(InnoDB采用B+Tree,树的叶子节点就是主键索引,这也是二级索引需要回表的原因),这也就导致了如果主键索引比较大,其他所有索引都会很大,所以表中索引较多时,主键应该尽可能的小

MylSAM存储引擎

MySQL5.1及以前的版本MylSAM是默认的存储引擎,MylSAM提供了包括全文索引、压缩、空间函数等特性,最大的缺陷就是不支持事务和行级锁,

另一个缺陷就是由于没有redo log,所以MylSAM没有InnoDB支持的快速恢复功能

MylSAM也有自己的优势,对于只读的数据,或者表比较小,可以使用MylSAM

存储

MylSAM将表存储在两个文件,数据文件和索引文件

特性

加锁与并发

MylSAM对整张表加锁,而不是行锁,读取时会将涉及到的所有表加共享锁,写时加排它锁,但是有读取的同时可以并发插入

修复

MylSAM检查表的错误,可以手动或者自动的修复

索引

支持全文索引

MylSAM和InnoDB的区别

  1. MylSAM提供了包括全文索引、压缩、空间函数等特性,最大的缺陷就是不支持事务和行级锁,而InnoDB支持事务和行级锁
  2. InnoDB支持事务、备份、崩溃恢复
  3. MyISAM适合查询以及插入为主的应用。
  4. InnoDB支持外键,MyISAM不支持
  5. InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表
  6. InnoDB是聚簇索引(叶子节点存数据),MyISAM是非聚簇索引(叶子节点存指针)

特性

(1)插入缓冲

对于非聚集类索引的插入和更新操作,不是每一次都直接插入到索引页中,而是先插入到内存中。就相当于加了一层“redis”。

具体做法是:如果该索引页在缓冲池中,直接插入;否则,先将其放入“插入缓冲区”中,然后再以一定的频率和索引页合并。这时,就可以将同一个索引页中的多个插入合并到一个IO操作中,大大提高写性能。

(2)两次写

在应用重做日志前,会先建立一个页的副本,当写入失效发生时,先通过页的副来还原该页,再进行重做。

3)自适应哈希索引

哈希是一种非常快的查找方法,一般仅需要一次查找就能定位数据,而B+树需要3~4次。InnoDB会监控对表中数据的查询,如果觉得换为哈希索引能提升速度,就会自动建立哈希索引。

(4)异步IO

用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部发送完毕后,再等待所有IO操作的完成。同时,也可以将多个IO合并为一个IO。

(5)刷新邻接页

当刷新一个脏页时,InnoDB会检测该页所在区的所有页,如果是脏页,会一起刷新。这样能减少IO次数。

目录
相关文章
|
8月前
|
存储 安全 关系型数据库
|
6月前
|
存储 关系型数据库 MySQL
InnoDB 引擎技术文档
【7月更文挑战第6天】InnoDB 是 MySQL 数据库中最常用的关系型数据库存储引擎,自 MySQL 5.5 版本以来成为默认存储引擎。它支持事务处理、行级锁定、外键约束以及崩溃恢复能力,特别适合于高并发、高可靠性的应用场景。InnoDB 引擎还提供了对大容量数据的支持,通过聚簇索引实现数据和索引的紧密集成,优化了查询性能。
111 0
|
SQL NoSQL 关系型数据库
Mysql Innodb死锁情况分析与归纳
Mysql Innodb死锁情况分析与归纳
106 0
|
机器学习/深度学习 存储 计算机视觉
Segment-Anything的一些相关论文总结
Segment-Anything的一些相关论文总结
330 1
|
存储 算法 关系型数据库
深入浅出——InnoDB页结构详解,慎入!
上一篇文章对InnoDB的行格式进行了解析,但是却把记录头信息抛到这里来讲,那么开始吧,注意本片需要有一点数据结构和算法基础,如果基础薄弱,请先确保自己会二分查找和链表再来食用...
85 0
深入浅出——InnoDB页结构详解,慎入!
|
存储 缓存 算法
深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!
从这篇文章开始,将对InnoDB的行格式和页结构进行介绍,这里主要介绍一下InnoDB的行格式,但是在故事的开始,都来提一下吧 InnoDB将数据划分为若干页,以页作为磁盘与内存交互的基本单位,一般页的大小为16KB。这样的话,一次性至少读取1页数据到内存中或者将1页......
157 0
深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!
|
存储 SQL 自然语言处理
MySQL索引简介 - InnoDB和MyISAM索引模型
MySQL索引简介 - InnoDB和MyISAM索引模型
106 0
|
存储 SQL 缓存
Innodb体系架构学习整理
InnoDB存储引擎最早由Innobase Oy公司开发,被包括在mysql数据库所有的二进制发行版本中,从mysql5.5版本开始默认的表存储引擎。其中Heikki Tuuri是InnoDB存储引擎的创始人。 InnoDB架构体系包含后台线程、内存、checkpoint技术,其中后台线程包含主线程、io处理线程、回收分配undo线程、页清理线程;内存包括缓冲池、重做日志缓冲、额外缓冲池;checkpoint技术包含 Sharp Checkpoint、FuzzyCheckpoint,数据库运行时,通常会和FuzzyCheckpoint打交道,通常会根据检查点age来处理
165 0
Innodb体系架构学习整理
|
存储 SQL 监控
Innodb 相较于MyISAM 的优势在哪
Innodb 相较于MyISAM 的优势在哪
Innodb 相较于MyISAM 的优势在哪
|
存储 关系型数据库 MySQL
深入浅出InnoDB中的行锁
深入浅出InnoDB中的行锁
深入浅出InnoDB中的行锁