详解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次数。

目录
相关文章
|
2月前
|
算法 安全 关系型数据库
深度|庖丁解InnoDB之Buffer Pool
聚焦在Buffer Pool的本职功能上,从其提供的接口、内存组织方式、Page获取、刷脏等方面进行介绍
104616 90
|
11月前
|
存储 SQL 自然语言处理
MySQL索引简介 - InnoDB和MyISAM索引模型
MySQL索引简介 - InnoDB和MyISAM索引模型
75 0
|
11月前
|
存储 算法 关系型数据库
深入浅出——InnoDB页结构详解,慎入!
上一篇文章对InnoDB的行格式进行了解析,但是却把记录头信息抛到这里来讲,那么开始吧,注意本片需要有一点数据结构和算法基础,如果基础薄弱,请先确保自己会二分查找和链表再来食用...
34 0
深入浅出——InnoDB页结构详解,慎入!
|
11月前
|
存储 缓存 算法
深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!
从这篇文章开始,将对InnoDB的行格式和页结构进行介绍,这里主要介绍一下InnoDB的行格式,但是在故事的开始,都来提一下吧 InnoDB将数据划分为若干页,以页作为磁盘与内存交互的基本单位,一般页的大小为16KB。这样的话,一次性至少读取1页数据到内存中或者将1页......
80 0
深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!
|
存储 关系型数据库 MySQL
J. Cole 的 InnoDB 系列 - 1. 学习 InnoDB - 深入探索核心原理之旅
J. Cole 的 InnoDB 系列 - 1. 学习 InnoDB - 深入探索核心原理之旅
|
存储 SQL 安全
InnoDB存储引擎简介
存储引擎是数据库的核心,对于 MySQL 来说,存储引擎是以插件的形式运行的。虽然 MySQL 支持种类繁多的存储引擎,但最常用的当属 InnoDB 了,本篇文章将主要介绍 InnoDB 存储引擎相关知识。
136 0
|
关系型数据库 数据库 索引
InnoDB btree latch 优化历程
(一般在数据库里面latch 指的是物理Lock, Lock 指的是事务的逻辑lock, 这里混用) 在InnoDB 的实现中, btree 主要有两种lock: index lock 和 page lock index lock 就是整个Index 的lock, 具体在代码里面就是 dict_index->lock page lock 就是我们在btree 里面每一
638 0
|
存储 缓存 算法
X-Engine 研究综述
研究背景 X-Engine 是一种基于 Log-structured Merge Tree (LSM-tree) 的存储引擎,较基于 B-tree 一族的其它存储引擎而言年轻很多,所以在实践中遇到问题也更多,对研究的需求也更大。LSM-tree 是 1996 年由美国计算机科学家 Patrick O'Neil 等人提出的一种数据结构,和 B-tree 相比,它拥有更
|
存储 缓存 架构师
InnoDB架构,一幅图秒懂!
简单说说InnoDB架构。一分钟,一幅图,秒懂。
1380 0
InnoDB架构,一幅图秒懂!
|
存储 算法 关系型数据库
关于innodb和tokudb存储引擎的压缩能力测试
新手上路,有不确切的地方,请指正~
7500 0