面试要点整理-Mysql

1.数据库索引的原理,为什么要用 B+树,为什么不用平衡二叉树?

红黑树多用于内部排序,即全放在内存中
B+树多用于外存上时,B+也被成为一个磁盘友好的数据结构
红黑树和平衡二叉树有相同缺点,每个节点存储一个关键词,数据量大时,导致红黑树的深度很深,mysql每次读取时消耗大量io

2.分库与分表的设计

分库分表方案 :
        水平分库:以字段为依据,按照一定策略(hash range 等),将一个库中的数
据拆分到多个库中。
        水平分表:以字段为依据,按照一定策略(hash range 等),将一个表中的数
据拆分到多个表中。
        垂直分库:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。
        垂直分表:以字段为依据,按照字段的活跃性,将表中字段拆到不同的表(主表和
扩展表)中。
分库分表可能遇到的问题
        事务问题:需要用分布式事务啦
        跨节点 Join 的问题:解决这一问题可以分两次查询实现
        跨节点的 count,order by,group by 以及聚合函数问题:分别在各个节点上得到
结果后在应用程序端进行合并。
        数据迁移,容量规划,扩容等问题
        ID 问题:数据库被切分后,不能再依赖数据库自身的主键生成机制啦,最简单可
以考虑 UUID
        跨分片的排序分页问题

3.Mysql事务的隔离级别

读未提交( Read Uncommitted
读已提交( Read Committed
可重复读( Repeatable Read
串行化( Serializable
Mysql 默认的事务隔离级别是可重复读 (Repeatable Read)

4.mysql间隙锁的概念

当我们用范围条件而不是相等条件检索数据, 并请求共享或排他锁时,InnoDB 会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)” ,InnoDB 也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁

5.共享锁和排他锁

共享锁:又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁:又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据进行读取和修改。
 

6.mysql锁的是行数据还是索引

在MySQL中,行级锁并不是直接锁记录,而是锁索引。

7.mysql中三大日志,redo log、binlog、undo log

redo log:redo log是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。
比如 MySQL 实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。
binlog:保证了MySQL集群架构的数据一致性
undo log:在 MySQL 中,恢复机制是通过 回滚日志(undo log) 实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作

8.mysql的MVCC

多版本并发控制。对数据行的读取和更新要并发控制,并发控制的目的是为了多线程下的数据安全。

MVCC是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。
当然存储的并不是实际的时间值,而是系统版本号(system version number)。每开始一个新的事务,系统版本号都会自动递增。
事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。

9.mysql更新update语句,做了哪些操作

  <1> 连接器和客户端连接
  <2> 删除要update表的缓存
  <3> 分析器分析sql语句是否有语法错误
  <4> 优化器确定需要使用的索引
  <5> 执行器调用存储引擎接口获取对应的行数据返回给server层
  <6> 执行调用存储引擎接口写入更新后的数据
  <7> 存储引擎接口将更新后的数据写入内存
  <8> 存储引擎,提交redo 日志,进入prepare状态,通知server层
  <9> server层提交binlog,通知存储引擎
  <10> 存储引擎将redo日志commit

10.mysql索引一定支持最左原则匹配吗

Mysql的8.0版本之后添加了 索引跳跃扫描 的功能,当第一列索引的唯一值较少时,跳过直接匹配第二列的索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值