首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Converging
北京理工大学 数据挖掘
发布于广东
关注
已关注
取消关注
@iworker:
Mysql八股
1. 日志1. Redo Log又叫做重做日志,InnoDB提供的用于保证 Crash Safety 的日志功能,保证了事物的持久性(Durability)。目的:通过WAL(Write-Ahead Logging)来保证Crash Safety;WAL顺序写入的特性也使得写操作更快(推迟了实际的随机写)。容量:大小固定。写入方式:循环写入(双指针):write pos:写入位置;check point:待擦除位置(对应的buffer pool中的脏页被实际刷盘后便会擦除redo log中的记录);日志内容:物理日志,记录的是“在某个数据页上做了什么修改”。原理:redo log中的内容代表还未被刷盘的变动,每个txn会生成一条redo log record,当修改的数据(脏页)实际刷盘后对应的redo log会被擦除。每一条redo log有prepare和commit两个状态,当系统重启时会检查redo log file并将所有处于commit的redo log records刷盘并擦除。2. Bin Log Binlog也称为归档日志,是Server层自己的日志。目的:用于备份恢复、主从复制。容量:不固定,可扩容(无大小限制)。写入方式:追加写,写满一个文件切换到下一个。日志内容:逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。原理:备份恢复:Binlog 文件保存的是全量的日志,也就是保存了所有数据变更的情况,配合全量备份可以恢复数据库状态到任意时刻;主从复制:MySQL 主库在收到客户端提交事务的请求之后,会先写入 binlog,再提交事务,更新存储引擎中的数据,事务提交完成后,返回给客户端“操作成功”的响应;从库会创建一个专门的 I/O 线程,连接主库的 log dump 线程,来接收主库的 binlog 日志,再把 binlog 信息写入 relay log 的中继日志里,再返回给主库“复制成功”的响应;从库会创建一个用于回放 binlog 的线程,去读 relay log 中继日志,然后回放 binlog 更新存储引擎中的数据,最终实现主从的数据一致性。3. Undo LogUndo log又称为回滚日志,用于实现事务回滚与MVCC。Undo log的写操作发生在最开始,将更新前的原始数据保存在undo log中。Undo log在事务开始前产生。Undo log也会产生redo log。目的:实现原子性事务提交前可能发生的回滚;构建MVCC来实现事务间的隔离级别容量:不固定,可扩容。写入方式:追加写,写满一个文件切换到下一个。日志内容:每条undo log中的日志分为两部分,基本信息和操作信息基本信息记录了该条日志的undo类型,表id等等信息;操作信息根据操作类型不同分为三类(15445中的DELTA STORAGE):增:主键值,主键长等主键信息;删:主键信息以及旧的事物id,旧的row ptr(用于构建有序的undo版本链);改:如果不更新主键:主键信息以及旧的事物id,旧的row ptr,更新的信息;更新主键:两条,一条删除一条新增;Insert的undo log在提交后就可以删除了(只在回滚时起作用),delete和modify需要保留来实现undo版本链。Undo log页分为两大类:新增操作和删除/修改操作;新增操作的在提交后直接删除;原理:在操作真正数据之前将undo log写入磁盘之中,以保证可以实现撤销。实际数据行与undo logs之间通过row ptr连接构成undo版本链来实现MVCC。2. 索引2.1 联合索引联合索引:为多个属性构成的复合值建立索引;最左匹配原则,当遇到范围查询(>、<、between、like)就会停止匹配;将区分度高的字段放在前面,区分度低的字段放后面。SELECT * FROM `table` WHERE a = 1 ORDER BY b;如何建立索引?对(a,b)建索引,当a = 1的时候,b相对有序,可以避免再次排序。SELECT * FROM `table` WHERE a > 1 ORDER BY b;如何建立索引? 对(a)建立索引,因为a的值是一个范围,这个范围内b值是无序的,没有必要对(a,b)建立索引。SELECT * FROM `table` WHERE a IN (1,2,3) and b > 1;如何建立索引?还是对(a,b)建立索引,因为IN在这里可以视为等值引用,不会中止索引匹配,所以还是(a,b)。2.2 覆盖索引覆盖索引:通过联合索引来减少回表。例如一个表的主键是id,同时经常有通过a查b的需求:SELECT b FROM `table` WHERE a = 1;那么相比于为a建立索引,为(a, b)建立联合索引可以减少一次回表。2.3 聚簇索引从物理存储的角度来看,索引分为聚簇索引(主键索引)、二级索引(辅助索引)。聚簇索引是对有序文件的排序字段建立的索引B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;辅助索引是对文件的非排序字段建立索引二级索引的 B+Tree 的叶子节点存放的是主键值,而不是实际数据。所以,在查询时使用了二级索引,如果查询的数据能在二级索引里查询的到,那么就不需要回表,这个过程就是覆盖索引。如果查询的数据不在二级索引里,就会先检索二级索引,找到对应的叶子节点,获取到主键值后,然后再检索主键索引,就能查询到数据了,这个过程就是回表。3. MVCCMVCC是为了解决读与写之间的阻塞问题,让读写互不阻塞:Writers do not block readers;Readers do not block writers.MVCC只能在Read Committed和Repeatable Read两个隔离级别下工作。Read Committed和Repeatable Read的区别是生成Read View的时机不同在隔离级别为读已提交(Read Committed)时,一个事务中的每一次 SELECT 查询都会重新获取一次Read View;当隔离级别为可重复读(Repeatable Read)的时候,就避免了不可重复读,这是因为一个事务只在第一次SELECT的时候会获取一次Read View,而后面所有的SELECT都会复用这个Read ViewMVCC解决了脏读问题,在视图的作用下事务无法读取未提交的版本。MVCC并没有解决丢失更新(Lost Update)的问题,为此额外添加了一条规则:更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”(current read)。当前读会按照2PL协议加锁,事务提交时才释放。MySQL在Repeatable Read隔离界别下,不存在幻读问题。
点赞 4
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
12-04 09:44
联想_后端开发部_语音算法工程师(准入职员工)
海康威视内推,海康威视内推码
岗位:武汉 嵌入式开发timeline:8.30 测评,10.9 一面,10.11 二面一面技术:自我介绍讲下实习经历平常怎么debug项目中有没有遇到什么问题,怎么解决的介绍一下学校经历了解数据结构吗?基本的数据结构?查找搜索效率?有什么方法可以提高效率?具体围绕数据结构问了很多RTOS,多任务操作反问:做存储固件的,具体的进来再分二面HR:北京线下,地点在北京研发中心,具体内容就是唠家常,一些HR面的基本问题销售工程师工作体验,总结累但成长很多。1.大家最先关注的就是HIK的工作压力,只能说体面厂没有辜负盛名!名不虚传!我来这边是销售岗,基本上每天都要差不多11点下班。因为销售不仅需要对接...
点赞
评论
收藏
分享
昨天 17:30
Java
美团实习提问
友友们,最近有一个美团日常实习面试,但我怕准备不充分脏了面评,我去豆包问了一下说日常实习和暑期实习的面评互不相通(本人已大三),不知道靠不靠谱嘞
点赞
评论
收藏
分享
10-17 16:36
洛阳理工学院 测试开发
面试被爽约了😭😭😭
鼠鼠只能接着投了😰😰
迷茫的大四🐶:
价格这么低都能满了?
点赞
评论
收藏
分享
10-12 10:53
杭州电子科技大学 Java
绷不住了
牛客96763241...:
杭电✌️也是打完招呼,没人回吗
点赞
评论
收藏
分享
12-08 14:57
已编辑
门头沟学院 安卓
亲戚一张嘴,离职变丑闻
离职这玩意本来就是自己的私事,想告诉谁就告诉谁的一件事,但是吧,现实还真不能随便告诉其他人,尤其是自己的家人还有那些所谓的亲戚朋友。自己的爸妈其实是可以告诉的,但是本着报喜不报忧的策略,其实更重要的是,怕爸妈忍受不住七大姑八大姨的看笑话,小事扩大化,让我的爸妈抬不起头来,让爸妈为我担心和焦虑得不偿失。一、有些人就是那么闲,唯恐天下不乱 可能你会觉得人怎么那么闲,别人离职了有什么好议论的,但是有些人就是这么闲,就是喜欢看别人笑话。就像我在前公司时候,有时候工作压力大了,然后被领导恶心到了,会把心情放在签名上(我知道这样不好),但是总有一些公司法官把我的签名截图,然后谄媚的发给我的领导,这些人就是...
离职你会和父母说吗?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
零经验也能斩获实习offer
4063
2
...
7天10面 来分享一下我的11月面筋!
3648
数字马力交流圈
热聊中
3
...
0实习冲明年前端暑期,要不要找寒假实习?
3199
4
...
这环境。。。我来谈谈选择和长期主义
2793
华为进展交流圈
热聊中
5
...
工作两年裸辞读研,我后悔了吗···
2629
6
...
百度网盘Golang开发一面凉经
2449
7
...
都是匆忙的选择,感觉人生真的很儿戏
2234
8
...
小红书26校招Java二面85min
1626
9
...
LangChain4j(Java 版 LangChain)速成教学
1430
10
...
26岁的我,后悔读双非硕士
1353
创作者周榜
更多
正在热议
更多
#
你今年做了几份实习?
#
2325次浏览
42人参与
#
实习必须要去大厂吗?
#
166178次浏览
1651人参与
#
百融云创求职进展汇总
#
8660次浏览
116人参与
#
实习越久越好,还是多多益善?
#
7202次浏览
64人参与
#
刚工作,应该先搞钱or搞成长?
#
3407次浏览
52人参与
#
0经验如何找实习?
#
9144次浏览
205人参与
#
求职低谷期你是怎么度过的
#
23649次浏览
316人参与
#
你是怎么和mt相处的?
#
81904次浏览
426人参与
#
25年找工作是什么难度?
#
5316次浏览
57人参与
#
一上班就想____,这正常吗?
#
1786次浏览
40人参与
#
你开始找寒假实习了吗?
#
5251次浏览
93人参与
#
你找工作经历过哪些骗局?
#
3218次浏览
60人参与
#
离职你会和父母说吗?
#
4687次浏览
61人参与
#
找工作能把i人逼成什么样
#
1073次浏览
19人参与
#
研究所VS国企,该如何选
#
230213次浏览
1954人参与
#
产品每日一题
#
73109次浏览
656人参与
#
面试题刺客退退退
#
490306次浏览
7280人参与
#
如果有时光机,你最想去到哪个年纪?
#
63212次浏览
842人参与
#
你的实习什么时候入职
#
323016次浏览
2182人参与
#
你觉得技术面多长时间合理?
#
153296次浏览
1100人参与
#
你会为了工作牺牲生活吗?
#
64832次浏览
438人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务