如果没有什么意外的话,应该是近期的最后一篇了。我也希望是最后一篇。
祝大家能找到心仪的工作。
我确实没有打错题目,我在面试的时候就是这么问我的,我问子链接是什么意思,给我介绍的很模糊,没有听太懂,之后线下搜索也没有搜到有什么东西叫子链接。
我只搜到了连接查询和子查询的区别。我估摸着面试官应该是想问这个?
连接查询就是join查询,分为内连接和外链接。
子查询是指,select语句嵌套select语句,被嵌套的语句是子查询。
子查询:
子查询是多表查询的一种形式,是一种次要查询,返回的结果数据被用于主查询的条件中,它返回的结果可以是一行或多行
查询效率较低,性能差,因为底层数据是笛卡儿积,
可读性相对较高
代码较麻烦
当只需要唯一的列,用子查询
连接查询
连接查询是对两个以上表逐记录(一行一行地)进行相关查询
主要使用join关键字,配合inner (内连接)left outer (左外连接)right outer(右外连接)等使用
性能高
代码简洁
可读性较差
当需要连接多个表时,用联结查询更好,效率高
如果是cn,dn分离的架构,那么使用连接数目也会不同,为了保证mysql协议完整性,子查询会比join多一条连接,当然,如果使用多个连接做join,那么情况另说。
这个网上我也找不到相关的。
我个人认为,宽泛意义应该是算的,谓词下推的意义在于更早的过滤掉返回上层的数据,ICP是满足这个条件的。
严格意义我觉得不算,ICP是index condition pushdown,索引条件下推,应该不属于谓词下推的范畴。
两次有面试官问我这个东西,第一次我没有记下来这个名字,第二次问道给我想起来了,事后记下来了。
1 MTR(mini-transaction) 微事务
在MySQL的 InnoDB日志管理机制中,有一个很重要的概念就是MTR。
我们知道Innodb事物有四种特性:ACID即原子性、一致性、隔离性、持久性,通常称为 逻辑事物。
用来保证一致性和持久性的机制就是MTR,即锁和日志,一旦事务提交,则其所做的修改会永久保存到数据库。
MTR是InnoDB存储擎中一个很重要的用来保证物理写的完整性和持久性的机制。
2 MTR在MysQL架构中的位置

MTR是上面的逻辑层与下面物理层的交互窗口
3 MTR作用
主要保证物理操作的一致性和原子性;
同时也是用来保证下层物理数据正确性、完整性及持久性的机制。
4、MTR概念图

我第一个想到的就是主从同步,还有内部事务二阶段提交,但是我没有办法说的更详细了。
这个问题换一下其实就是讲一下binlog的重要性和作用。
我搜到的binlog的作用主要就两方面:
1、数据恢复。只要有数据库在某个时刻的备份以及此时后的所有binlog,就可以恢复数据库的数据。
2、主从复制。为了提高MySQL的效率,经常做读写分离,即一主多从。
一个主库(写库),多个从库(读库)。
此时,从库可以监控主库的binlog日志,同步写库的所有更改操作。
binlog和redo二阶段提交能够保证主从复制时,主从之间不会复制出错误。
我之前看这块的时候就有想过这个问题,但是我没有太在意,这回居然直接问我了。
都说binlog是为了满足wal,但是我觉得已经有redo了,binlog的存在意义是什么呢?
binlog 是逻辑日志,记录的是对哪一个表的哪一行做了什么修改;redo log 是物理日志,记录的是对哪个数据页中的哪个记录做了什么修改。
但说实话,我觉得这些区别并不是 redo log 不能取代 binlog 的原因,完全可以调整 redo log 让他兼容现在 redo log 和 binlog 的能力。
所以我当时的回答是可以替代,但是需要改一下redo的格式。
我觉得这个题问的很开放,各有各的理,能说清楚我觉得就没什么问题。。。
我认为不用 redo log 取代 binlog 最大的原因是“没必要”。
为什么这么说呢?
第一点,binlog 的生态已经建立起来。MySQL 系统高可用依赖的就是 binlog 复制,还有很多公司的数据分析系统,也是依赖的 binlog。像阿里巴巴的开源框架 Canal,也是基于 binlog 开发的。
第二点,binlog 并不是 MySQL 的瓶颈,花时间在没有瓶颈的地方没必要。
3000帧动画图解MySQL为什么需要binlog、redo log和undo log
GTID的基本概念与应用_三思呐三思的博客-CSDN博客_gtid
gtid的全称为全局事务标识符(global transaction identifiner)
是MySQL 5.6引入的一个特性。gtid保证了MySQL的每一个事务都有一个全局唯一的标识,该标识在本实例甚至主从复制环境都保证全局唯一。
1)通过gtid定位该事务来自哪个实例
2)搭建主从复制不再需要指定binlog文件以及具体的位点信息,而是通过全局唯一的gtid来做复制,MySQL通过gtid来验证冲突并确保每个事务只会被执行一次。
3)方便DBA的运维管理,快速改变主从复制关系
GTID在主从复制中如何工作?
1)master执行的每一个变更操作都生成一个gtid值,并且会把该值记录在binlog中用来主从复制,后续择机更新gtid_executed表记录
2)主从复制模式下,start slave后,从库会将自身执行过的gtid集合信息发送给主库,主库将从库未执行过的binlog信息发送给从库
3)从库读取relaylog中把该值设置为当前的gtid_next值,对具体的事务进行应用,择机更新gtid_executed表记录。期间主库不断的将新产生的binlog event发送至从库
从库应用主库的事务时不会生成新的gtid值,而是将读取的gtid_next的值记录在自己的binlog文件中