mysql高级(底层存储引擎、事务、索引及优化、查询优化、锁机制、读写分离-主从结构)

这篇博客深入探讨了MySQL的高级特性,包括内部结构中的存储引擎、事务处理(原子性、一致性、隔离性和持久性)、索引优化(B+树、哈希索引)和查询优化策略。详细阐述了INNODB和MYISAM的区别,事务的隔离级别及其问题,以及MVCC的实现原理。还讨论了锁机制,如表锁和行锁,以及读写分离在数据库架构中的应用。
摘要由CSDN通过智能技术生成

一、内部结构:

在这里插入图片描述
mysql是一个可拔插的内部结构,包括连接池、解析器、查询优化器、缓存区(cache和buffer)、file system(redo、undo、binlog、索引等)、存储引擎。
常用的知识点:

  • WAL: 写前日志包括redo和undo
  • redo log : 记录事务的动作
  • undo log: 记录事务的操作
  • bin log: 主从数据库中记录主的日志
  • relay log : 主从数据库中从数据库的日志
  • 存储引擎:innodb myisam dbd memory

问题1 : select语句的执行过程:

在这里插入图片描述

问题2:INNODB和MYISAM的比较:

  • INNODB有事务、支持外键、支持聚集索引、支持行锁、适用于安全性较高、且写操作较多的表(订单表、账号表)
  • MYISAM无事务、无外键、支持非聚集索引、支持标所、查询所读快、支持批量插入、适用于读操作较多、或需要大规模插入的表(论坛表、回复表)

二、事务:

问题1 : 什么是事务、有哪些特性?

在这里插入图片描述

  • 事务就是一组对数据操作的集合
  • A 原子性:事务要么都做、要么都不做
  • C 一致性:事务不影响数据库完整性(约束完整性、数据完整性)
  • I 隔离性:两个事务之前互相不影响(锁+MVCC)
  • D 持久性:事务修改后,进行持久化保存

其中原子性、持久性、隔离性中的MVCC由redo和undo来实现。而一致性中的数据完整性是由其他三个特征共同作用的结果,并不是依赖于某一种单独的技术。

原理:在操作事务前,先要在磁盘中写数据到buffer pool中,当此时出现断网等意外操作时,会先去redo log中寻找事务做了哪些操作,再去undo log中找到事务到底改变了什么数据,这样整个事务就完成了恢复。

问题2 : 事务的隔离级别于数据库隔离出现问题的对应关系是什么?

在这里插入图片描述
脏读:RU下,事务A读到了事务B未提交的数据。

不可重复度:RC下,事务A前后两次读到了同一字段不同值(UPDATE操作,值改变)事务B修改了字段值。
幻读:RR下,事务A读到前后两次读到了不同数量的同一字段(INSERT操作,数量改变)事务B插入了数据

问题3 : MVCC实现原理

在这里插入图片描述
在这里插入图片描述
事务1在修改数据前:

  • 排它锁锁定事务1、记录操作到redo log
  • 讲原修改行复制到 undo log 中 , 记录数据
  • 增加事务号、讲回滚指针连接
  • purge 线程用来扫描这次事务最早的操作,将之前的日志进行删除以保证redo log 不会无限写入

MVCC优点:读不加锁、读写分离

问题4 : 事务的开启方式:

第一种:直接开启事务

START TRANSACTION;
		事务代码
		commit;

第二中:关闭自动提交

set autocommit=0
		事务代码
		commit

三、索引及优化:

问题1 : mysql有什么索引:

以内部结构来分类

  • 哈希索引:通过哈希函数计算哈希值,对应某个地址,查询速度快。但无法范围查询,切会出现哈希碰撞(解决方式为碰撞位置组成单链表)
  • B+树索引:mysql的主流索引。

以索引类型来划分

  • 聚集索引: innodb的索引类型,B+树的叶子节点里存的是索引和数据。对应着Innodb的表,只有表文件和索引数据文件两个。
  • 非聚集索引:myisam的索引类型,B+树的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值