存储过程查询快么_mysql你知道这些么

a7695a318083a9c55ef1866c84370b6f.png

b2c7795f5032bf820bf7b7cbf5b615cd.png

我会对上图的知识点和相关的面试题进行整理,喜欢的可以点个关注

面试官:你平时开发用的什么数据库啊

小白:平常开发都用的mysql

面试官:那我们就来聊一聊mysql吧。你mysql一般用的什么存储引擎啊?

小白:因为业务需要我们试用的是支持事务的innodb的

面试官:那你知道innodb支持事务主要是怎么实现的么?

小白:是通过innodb特有的redolog,和采用两阶段提交来实现的。

面试官:那你可以说说redolog的理解,和两阶段提交是什么一个过程么?

小白:redolog就是为了防止每次对数据库的一个增删改的操作都去操作磁盘而设立的,也就是redolog节省了有关写的io消耗,而说到两阶段提交就要说说binlog了,binlog是server层的日志文件,记录了整个库的一个增删改的变化,redolog和binlog的区别主要有以下三点:
1.redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
2.redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑
3.redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
而所谓的两阶段提交就是将更新操作先记录到redo log里面,此时redo log处于prepare状态。然后告知执行器执行完成了,随时可以提交事务。然后执行器生成这个操作的binlog,并把binlog写入磁盘。在然后执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log改成提交(commit)状态,更新完成

面试官:那你知道为什么要采用两阶段提交么

小白:因为如果不采用两阶段提交的话,无论是先写redolog还是先写binlog,如果在写完一个另一个还没有写完的时候服务crash(崩溃)了,后面根据binlog进行一个数据恢复就会产生数据不一致的问题。

面试官:索引你应该有所了解吧,你知道普通索引和唯一索引在使用的时候应该注意哪些么

小白:这里主要要考虑的是一个对change buffer的一个利用,因为change buffer是可以有效节约读磁盘的消耗的,而如果你一个在非必须的场景下,给一个字段建立了唯一索引,那么对那个字段的操作将不能使用到change buffer,从而浪费大量资源。备注(change buffer用来记录一些对数据库的更新操作,如果对数据库的一个更新操作,是肯定可以成功的,比如插入一条数据(不用去判断插入内容是否违法唯一约束啥的),那么就可以不用去把要操作的数据从磁盘读到内存中,等到下次要查询的时候在进行一个操作,从而达到一个节约读磁盘io操作,如果你那个字段加了唯一索引的话,就必须得读取到内存中进行一次判断,虽然判断消耗得cpu资源很少,但是那个读取得过程是很耗性能得)

面试官:那你在跟我讲讲你建索引要注意哪些事项啊

小白:首先因为innodb采用得聚簇索引,所以对主键得选取尽量采用占用内存小的,其次要利用好mysql建立索引得最左匹配原则来减少回表得一个操作,提升一个查询效率。

面试官:你提到了回表,你和我说说回表是什么意思啊

小白:因为innodb采用得是聚簇索引,只有主键索引(一级索引)才会记录整行得值,而二级索引(非主键索引)只会记录主键得值,也就是如果你查询条件用的是二级索引,而二级索引中保存得信息又不满足要查询得字段,那么就会在根据主键在取主键索引上进行一个查询,这个过程称为回表。通过索引覆盖就可以适当得减少回表得一个现象,从而提升查询效率,索引覆盖就是你建立得二级索引就已经满足你要查询得字段要求了,那样就不需要进行一个回表操作了

面试官:你对mysql得一个sql优化有没有过了解呢

小白: 对于mysql的一个优化,一般都会有一个监控平台对慢sql进行一个监控,也可以通过开启慢查询,设置一些参数来进行一个监控,当知道哪些sql语句是慢sql后,就可以通过explain命令对它的一个执行过程进行一个具体的解析,可以看到查询的一个类型,有没有用到索引,有哪些索引可以选择等等,然后如果是因为没有建索引,就可以创建,如果有索引没有采用的话,就分析一下原因进行一个修改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值