• 数据库内核面试中我不会的问题(6)


    如果没有什么意外的话,应该是近期的最后一篇了。我也希望是最后一篇。

    祝大家能找到心仪的工作

    1.说一下子查询和子链接的区别?

    我确实没有打错题目,我在面试的时候就是这么问我的,我问子链接是什么意思,给我介绍的很模糊,没有听太懂,之后线下搜索也没有搜到有什么东西叫子链接。

    我只搜到了连接查询和子查询的区别。我估摸着面试官应该是想问这个?

    连接查询就是join查询,分为内连接和外链接。

    子查询是指,select语句嵌套select语句,被嵌套的语句是子查询。

    子查询

    • 子查询是多表查询的一种形式,是一种次要查询,返回的结果数据被用于主查询的条件中,它返回的结果可以是一行或多行

    • 查询效率较低,性能差,因为底层数据是笛卡儿积,

    • 可读性相对较高

    • 代码较麻烦

    • 当只需要唯一的列,用子查询

    连接查询

    • 连接查询是对两个以上表逐记录(一行一行地)进行相关查询

    • 主要使用join关键字,配合inner (内连接)left outer (左外连接)right outer(右外连接)等使用

    • 性能高

    • 代码简洁

    • 可读性较差

    • 当需要连接多个表时,用联结查询更好,效率高

    如果是cn,dn分离的架构,那么使用连接数目也会不同,为了保证mysql协议完整性,子查询会比join多一条连接,当然,如果使用多个连接做join,那么情况另说。

    2.mysql的ICP算不算谓词下推?

    这个网上我也找不到相关的。

    我个人认为,宽泛意义应该是算的,谓词下推的意义在于更早的过滤掉返回上层的数据,ICP是满足这个条件的。

    严格意义我觉得不算,ICP是index condition pushdown,索引条件下推,应该不属于谓词下推的范畴。

    3.讲一下MTR

    两次有面试官问我这个东西,第一次我没有记下来这个名字,第二次问道给我想起来了,事后记下来了。

    1 MTR(mini-transaction) 微事务
    在MySQL的 InnoDB日志管理机制中,有一个很重要的概念就是MTR。
    我们知道Innodb事物有四种特性:ACID即原子性、一致性、隔离性、持久性,通常称为 逻辑事物。
    用来保证一致性和持久性的机制就是MTR,即锁和日志,一旦事务提交,则其所做的修改会永久保存到数据库。
    MTR是InnoDB存储擎中一个很重要的用来保证物理写的完整性和持久性的机制。

    2 MTR在MysQL架构中的位置


    MTR是上面的逻辑层与下面物理层的交互窗口

     

    3 MTR作用

    主要保证物理操作的一致性和原子性;
    同时也是用来保证下层物理数据正确性、完整性及持久性的机制。

    4、MTR概念图

     

    4.为什么要有binlog?

    我第一个想到的就是主从同步,还有内部事务二阶段提交,但是我没有办法说的更详细了。

    这个问题换一下其实就是讲一下binlog的重要性和作用

    我搜到的binlog的作用主要就两方面:

    1、数据恢复。只要有数据库在某个时刻的备份以及此时后的所有binlog,就可以恢复数据库的数据。

    2、主从复制。为了提高MySQL的效率,经常做读写分离,即一主多从。

    一个主库(写库),多个从库(读库)。

    此时,从库可以监控主库的binlog日志,同步写库的所有更改操作。

    binlog和redo二阶段提交能够保证主从复制时,主从之间不会复制出错误。

    5.mysql的binlog能去掉么,你有什么想法?

    我之前看这块的时候就有想过这个问题,但是我没有太在意,这回居然直接问我了。

    都说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

     

    6.讲一下gtid

    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文件中

     

  • 相关阅读:
    G1D5-Intriguing properties of neural networks
    面试题:MyBatis批量插入的五种方式,哪种最强?
    elementui实现input输入框和textarea文本框回车换行
    多年以后「PageHelper」又深深的给我上了一课
    golang waitGroup(1)
    中国移动物联网开放平台OneNET学习笔记(1)——设备接入(MQTT协议)OneNET Studio篇
    Java SE 19 新增特性
    CSMACD协议与CSMACA协议
    Git 学习(三)---- GitHub 远程库操作
    【算法基础】基础算法(三)--(双指针算法、位运算、离散化、区间合并)
  • 原文地址:https://blog.csdn.net/qq_35423190/article/details/126388271