ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql知识点集锦

2021-04-13 09:32:18  阅读:181  来源: 互联网

标签:知识点 事务 读取 InnoDB MyISAM 集锦 Mysql quad 数据


1、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%,当需要访问数据,服务器会将所需要的信息读入到内存中,所以当访问具体记录时,性能会更好,因为只需要解压一条记录。
在这里插入图片描述

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

Memory

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

2、Innodb引擎

多线程

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

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

缓冲池

\quad 开辟内存空间用于缓存常被查询的数据。
在这里插入图片描述

预读

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

缓冲池算法:LRU+

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

标签:知识点,事务,读取,InnoDB,MyISAM,集锦,Mysql,quad,数据
来源: https://blog.csdn.net/qq_40438165/article/details/115302364

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有