mysql和InnoDB

数据库的定义

其实从使用数据库开始,一直就对数据库有一个比较模糊的定义,只是觉得数据库是很多数据的一个集合,今天我们来明确一下,首先明确两个定义:

数据库:物理操作文件系统或其他形式文件类型的集合;
实 例:MySQL 数据库由后台线程以及一个共享内存区组成;

数据库和实例

在 MySQL 中,实例和数据库往往都是一一对应的(也有可能是多对一),而我们也无法直接操作数据库,而是要通过数据库实例来操作数据库文件,可以理解为数据库实例是数据库为上层提供的一个专门用于操作的接口。

MySQL架构

在这里插入图片描述

看图大概分成这么三个部分
首先最上面的第一层,就是用于连接,线程处理的,这一部分并不是mysql本身的;第二层是mysql的核心服务,包括了对 SQL 的解析、分析、优化和缓存等功能,存储过程、触发器和视图都是在这里实现的;第三层就是mysql进行数据存储和提取的存储引擎;

InnoDB引擎架构

在这里插入图片描述
图中,红色方框中的就是InnoDB的体系结构,我们分别介绍一下

多个内存块构成的内存池,

Innodb存储引擎内存由以下三个部分组成:缓冲池(buffer pool),重做日志缓存(redo log buffer),额外的内存池(additional memory pool)。可以使用 show engine innodb status来查看innodb_buffer_pool的使用情况。

在这里插入图片描述

Innodb数据块缓冲池(buffer pool)

1 数据的读写要经过缓存,即缓存在buffer pool中
2 数据以整页(16K)为单位读到缓冲区中
3 缓存中的数据以RUL(最少使用)策略换出
4 IO效率高,性能好

后台线程

nnodb存储引擎后台有7个线程,—–4个IO线程(insert buffer thread,log thread,read thread,write thread),1个master thread,一个lock监控线程,一个错误监控线程。

InnoDB数据文件

数据文件就是存放数据库中数据索引的文件,InnoDB从数据文件中读数据进入缓存中

Innodb数据文件的储存结构

1 索引组织表(聚簇表)
2 根据表逻辑主键进行排序
3 数据节点每页16K

其实这些在上一篇就介绍过了,Innodb数据索引就是在一张表中,而且会根据主键进行排序;

特点:根据主键寻址快;根据主键递增插入快;根据主键随机插入慢;

InnoDb的特性:

插入缓存
当一个表有非聚集索引时,对于非聚集索引的叶子节点的插入不是顺序的,这时候需要离散的访问非聚集索引页,性能就在这里降低了,这是由于b+树的原理导致的。插入缓存就是用来解决这个问题的。
对于非聚集索引的插入和更新操作,不是每一次都直接插入索引页,而是先判断插入的非聚集索引页是否在缓存中,如果在就直接插入,如果不在就放入到一个插入缓冲区中,好似欺骗数据库这个非聚集索引已经插入到叶子节点了。然后再以一定的频率插入缓存和非聚集索引页字节点的合并操作。
两次写
提高了 数据页的可靠性。
在应用(apply)重做日志前,用户需要一个页的副本,当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是duble write 。
自适应哈希索引
哈希(hash)是一种非常快的查找方法,在一般情况下这种查找的时间复杂度为O(1),即一般仅需要一次查找就能定位数据。而B+树的查找次数,取决于B+树的高度,在生成环境中,B+树的高度一般3-4层,故需要3-4次的查询。
innodb会监控对表上个索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)

上面提到了聚簇索引和非聚簇索引这个概念,这里我们先简单说明一下,InnoDB中索引就分为聚簇索引和非聚簇索引(辅助索引)两个,数据文件中就是根据索引建立的索引结构,而这两个索引是有所不用的,下面我们将详细介绍一下InnoDB中的索引和事务

再次声明上面东西并非都是自己的想法,有借鉴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值