Mysql知识点集锦

1、Mysql常见存储引擎

Mysql知识点集锦

InnoDB

\quad 在Mysql5.5.8版本后,InnoDB成为Mysql默认存储引擎,支持事务和行级锁和外键,InnoDB通过多版本并发控制(MVCC)来获得高并发性,并实现了事务的四个隔离级别:

  • 未提交读:可读取未提交的操作数据,最低的隔离级别,这种情况会出现脏读。脏读:一个事务读取到了缓存中另一个事务未提交的数据。说明:当事务B对data进行了修改但是未提交事务,此时事务A对data进行读取,并使用事务B修改的数据做业务处理。
  • 已提交读:一个事务等待另一个事务提交完后才能读取,解决了脏读问题,但会出现不可重复读。不可重复读:读取数据的同时进行修改,一个事务范围内两个相同的查询却返回了不同数据。说明:当事务A、B同时对data进行访问,A读取,B修改。事务A第一次读取data后B提交,如果A再次读取data,则读到的数据就与第一次不同,这种情况称为不可重复读
  • 可重复读:读取事务开启的时候不能对数据进行修改,解决了不可重复读问题,但存在幻读问题。幻读:一个事务在读取数据时,另一个事务插入了数据,导致上个事务第二次读取数据时,数据不一致。
  • 可串行化:是最高的事务隔离级别,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

\quad InnoDB默认为可重复读等级,可能会出现幻读。但是该引擎提供了一种被称为next-keylocking的策略来避免幻读。除此之外,InnoDB还提供了插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。InnoDB采用聚簇索引,即将数据存储和索引放到了一块,索引结构的叶子节点保存了数据。

MyISAM

\quad 在Mysql5.5.8以前,MyISAM是默认存储引擎。MyISAM不支持事务。MyISAM采用非聚簇索引,数据和索引放在不同的文件中。对于不会修改的表,MyISAM支持使用myisampack工具来压缩数据文件,该工具使用的是哈夫曼编码算法来进行的数据压缩,压缩后的文件是只读的,要想修改只能解压后再修改。myisampack是一个压缩使用MyISAM引擎表的工具,一般会压缩40%~70%,当需要访问数据,服务器会将所需要的信息读入到内存中,所以当访问具体记录时,性能会更好,因为只需要解压一条记录。
Mysql知识点集锦

  • MyISAM支持表锁,innoDB支持行锁
  • 行级锁: 开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高
  • 表级锁: 开销小,加锁快,无死锁,锁定粒度大,发送锁冲突的概率最高,并发度最低

Memory

\quad 将表中数据放在内存中,如果数据库重启或者崩溃,则数据消失。适合于存储临时数据的临时表。默认使用哈希索引而非B+树索引,速度更快,但是只支持唯一键查找单个值,无法进行范围查询。

2、Innodb引擎

多线程

\quad Innodb后台有多个不同的后台线程,负责处理不同的任务。

  • 主线程:主要负责将缓存池中的数据异步刷新到磁盘,保证数据的一致性
  • IO线程:此处有8个线程,4个用于读,4个用于写,是异步IO,这样可以大大提升数据库性能

缓冲池

\quad 开辟内存空间用于缓存常被查询的数据。
Mysql知识点集锦

预读

\quad 磁盘读写,并不是按需读取,而是按页读取,一次至少读一页数据(InnoDB下页大小默认为16KB),如果未来要读取的数据就在页中,就能够省去后续的磁盘IO,提高效率。

缓冲池算法:LRU+

\quad LRU:最近最少使用算法。即最频繁使用的页放在LRU列表的前端,最少使用的页在LRU列表的尾端。当缓冲池满后首先释放尾端的页。详解见博客

上一篇:TinyBERT


下一篇:毕业设计:微表情识别学习笔记(一)