mysql数据库学习随记

2020-08-23  本文已影响0人  开心就好_4ad7

(一)MYSQL逻辑架构图

  为了从宏观层面了解MYSQL内部模块,通过下面的逻辑架构图了解其全貌,其图如下:


image.png

通过上图可以看到,MYSQL可以分为Server层和存储引擎两部分:
   server层主要包括连接器、查询缓存、分析器、执行器等,涵盖了MYSQL的大多数核心服务功能,以及所有的内置函数,所有跨存储引擎的功能都在这一层实现,比如存储过程,触发器、视图等。

负责与客户端建立连接,并验证用户的身份、权限等,包括sock通信和大多数基于客服端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似于连接处理、授权认证及相关安全的方案,在该层上引入了线程池的概念,为通过认证安全接入的客服端提供线程,同样在该层上可以实现基于SSL的安全的连接,服务器也会为安全接入的每个客户端验证它所具有的操作权限。。

主要将之前执行过的语句结果以KEY-VALUE对的形式缓存在内存中,其KEY是查询语句,VALUE是查询结果,如果缓存存在,则直接返回给客户端,当执行UPDATE语句会清空缓存。

分析器主要工作是做词法分析,较验SQL的语法是否正确、表和字段是否存在等。

优化器的主要确定语句的执行方案,比如怎么选索引,确定最优执行方案。

  1. 存储引擎:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有功能不同,它的架构是插件式的,支持INnoDB\MYISAM\Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它是从MYSQL5.5.5版本开始成为了默认存储引擎。

(二)MYSQL基础概念

事务隔离级别的实现

  理解了事务的隔离级别,那么事务隔是怎么实现的呢,下面以可重复读为例,在mysql中,每次更新操作都会同时记录一条回滚操作,通过回滚操作可以得到前一个状态的值,如下图:


image.png

  假设一个值从1被按顺序改成2,3,4,在回滚日志里面就会有如上图的记录。当前值是4,但是在查询这条记录的时候,不同时刻启动事务有不同的read-view.如图中看到的,视图A、B、C里面,这条记录的值分别是1,2,4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制mvcc,对于read-view A ,要得到1,就必须将当前值依次执行图中所有的回滚操作才能得到。那么日志什么时候删除呢,一般是在不需要的时候才删除,就是说系统会判断,当没有事务再需要用这到这些回滚时,就会被删除,也就是说系统里没有比这个回滚日志更早的read-view的时候。

事务隔离级别启动方式

  事务的启动试有以下两种:
1、显示式启动事务语句,begin或start transaction,配套的提交语句是commit,回滚语句是rollback.
2、set autocommit=0,这个命令会将这个系统的自动提交关闭,意味着如果你只执行一个select语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行commit或rollbak语句或断开连接。

索引的模型

  索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,我们常见有几种,它们分别是哈希表,有序数组和搜索树。
1、哈希表:它是一种以键-值(key-value)存储的数据结构,我们只要输入待查找的键key,就可以找到其对应的value,哈希的思路很简单,把值放在数组里,用一个哈希函数换算成一个确定的位置,然后把value放在数组的这个位置。哈希表这种结构适用于只有等值查询的场景。
2、有序数组:有序数组在范围查询和等值查询场景中性能就非常优秀,但有序数组索引只适用于静态存储引擎,其原因是当更新数据的时候,往中间插入一条记录就必须挪动后面所有的记录,成本就太高。
3、

(三)工作中常用

上一篇 下一篇

猜你喜欢

热点阅读