Mysql面试题


在这里插入图片描述
题外话:
update是行锁吗?
答:update的话其实mysql中有不同的引擎,myisam只有表锁,innodb的话,其实也不一定是行锁,要看这个字段有没有索引,没有的话就是表锁,有索引的话那就是行锁,当然也可能是行锁的x锁啊、间隙锁啊,要看这个字段存在不存在。

1. Mysql用的b+树为什么不用b树

b树它其实非叶子节点也会存储数据,而b+只会在叶子节点存储数据,那这样其实b+树效率更高一点,因为其实我们查的话都是要先将磁盘中的数据页加载进来,b+树的话它存的都是有用的东西,都是目录项嘛,而b树它会有一些用不到的信息,因为它还会存储当前节点的key的数据,那相当于b+树就变相的减少了磁盘的读入,磁盘操作是比较耗时的,另外的话其实索引也是有序的,b+树定位到叶子节点后,那如果范围查询的话因为每个数据页也是有双向链表的,范围的定位的话都在一块,所以一个一个读就可以,b树的话因为它非叶子节点也会存数据,导致这种范围查询的话没有b+树性能好。

2. Mysql超大分页怎么处理

在这里插入图片描述

在这里插入图片描述

第二种: > id limit x
在这里插入图片描述

3. 索引创建原则

在这里插入图片描述

4. 索引失效

在这里插入图片描述

5. 谈谈你对sql的优化的经验

在这里插入图片描述

在这里插入图片描述

6. 分库分表了解过吗

主要用的多的是
垂直分库:微服务
垂直分表:冷热数据分离
水平分库:将一个库的数据拆分到多个库中,解决海量数据存储和高并发的问题。
在这里插入图片描述
在这里插入图片描述

垂直分库:在这里插入图片描述

水平分库:一个表数据量超过1000万,进行水平分库,开了三台服务器,采用Mycat分片,都是根据id自增取模的方式来存储的

在这里插入图片描述

垂直分表:在这里插入图片描述

7. RR级别下,间隙锁会导致死锁吗?

会,其实间隙锁,它针对的是写锁,只要两个线程锁定的区间有交叉那就可能出现死锁。
比如说:现在表里面数据只有1和2,事务A先删除3,再插入,那么删除3它不存在就会加2到无穷的间隙锁,事务B也是,先删除4,再插入,它加的间隙锁也是2到无穷,那这两个事务就都卡在插入这里了,都等对方的间隙锁释放掉才能插入,导致死锁。
解决:1. 在删除时判断一下,没有数据就不删除了,就不会加间隙锁。
2. 在删除的时候先查一下对应的主键,根据主键删,那就变成行锁了,只会锁定这一行,不会出现这种两个线程锁的区间交叉的这种情况,就避免了死锁。

参考文章:https://blog.csdn.net/weixin_45497155/article/details/116307091

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值