问题:请讲下对mysql的理解

分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程

回答要点:

主要从以下几点去考虑,

1、mysql的整体架构?

2、mysql中每一个组件的作用?

3、对mysql的自己的见解?

从网上拷贝一张图,来说明mysql的整体架构

个人认为这张图画的很好,

连接器

一条sql经过网络传输到达mysql服务器,第一个要经过的就是连接器,负责连接的建立及权限的判定,例如经常看到的下面的错误,

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

该错误就是经过连接器的处理,密码不正确而返回的。

查询缓存

查询缓存,刚接触mysql的可能有疑惑,mysql怎么会有查询缓存,其实mysql就和平时开发的后端系统是一样的,它也是一个系统,平时如果一个查询较多的系统,发现查询慢了,经常采取的一种方式就是增加一个缓存吧,这里也是一样的,只不过这里mysql已经为我们做好了,就是来存储查询到的数据,缓存key是sql语句,缓存值是查询到的结果,关于查询缓存的具体介绍可以参照下方的链接:https://www.cnblogs.com/coshaho/p/7192343.html

分析器

分析器说的通俗点就是客户端发送来的一条sql,分析要分析这条sql是否正确,是否符合sql的语法,如果不符合就直接返回报错了。

优化器

经过了分析器处理的sql这时就是一条可执行的sql,但是mysql本身内置了一系列的逻辑,就是它会用它认为执行效率最高的方式去执行,并且生成执行计划(可通过explain sql语句查看),包括如何选择索引,是否会涉及全表扫描;

执行器

执行器就是真正执行sql的组件,并且把执行的结果返回

上面提到的几大组件,统一属于server层,server层之下是存储引擎层,mysql的存储引擎常见的有myIsam、innodb,不同的引擎对应的server层是一致的,也就是server层提供了引擎层的统一抽象和实现。为什么要有不同的存储引擎,是因为在不同的场景下数据的存储形式可以是不一样的,myIsam这个引擎实现的就是适合查询频率高的场景,不支持事务;innodb这个引擎实现的是支持事务。也就是说不同的场景决定了不同的引擎,所以在建数据表的时候经常会让我们指定使用的数据引擎,细心的同学可以留意下。

说完了mysql的整体架构,想说下mysql中常见的日志是怎么实现的,

binlog,做过mysql的都知道,在mysql中有binlog也叫做二进制日志,用来记录mysql中的更新操作,可用来进行数据的恢复,既然是记录mysql的更新操作,那么它就属于server层

redo log和undo log,了解事务的都知道redo log和undo log是用来支持事务的,在常用的myIsam和innodb引擎中,innodb是支持事务的,那么redo log和undo log应该是在引擎层产生的;

java面试一日一题:请讲下对mysql的理解的更多相关文章

  1. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  2. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  3. java面试一日一题:讲下redo log

    问题:请讲下redo log的作用 分析:mysql中有很多日志,例,binlog undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题? 回答要点: ...

  4. java面试一日一题:讲下mysql中的索引

    问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...

  5. java面试一日一题:讲对mysql的MVCC的理解

    问题:请讲下对mysql中MVCC的理解 分析:这个问题要回答的是对MVCC的理解,以及MVCC解决了什么问题这几个方面入手. 回答要点: 主要从以下几点去考虑, 1.什么是MVCC? 2.MVCC用 ...

  6. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  7. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  8. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

  9. java面试一日一题:如何优化sql

    问题:请讲下在mysql下如何优化sql 分析:该问题主要考察对mysql的优化,重点考虑对索引优化的掌握. 回答要点: 主要从以下几点去考虑, 1.什么样的sql需要优化? 2.怎么对sql进行优化 ...

随机推荐

  1. python进阶(11)生成器

    生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据. ...

  2. 第42天学习打卡(Class类 Class类的常用方法 内存分析 类的加载过程 类加载器 反射操作泛型 反射操作注解)

    Class类 对象照镜子后得到的信息:某个类的属性.方法和构造器.某个类到底实现了哪些接口.对于每个类而言,JRE都为其保留一个不变的Class类型的对象.一个Class对象包含了特定某个结构(cla ...

  3. RabbitMQ(一)安装篇

    1. RabbitMQ 的介绍➢ 什么是 MQ?MQ 全称为 Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.➢ 要解决什么样的问题?在项目中,将一些无需即时返回且耗 ...

  4. PyQt5之 QTableView 添加复选框(自定义委托)

    import sys from untitled import Ui_Form from PyQt5.QtWidgets import QApplication, QWidget, QStyleOpt ...

  5. Wireshark使用记录

    TCP/IP协议族里的协议众多 要一一精通比较困难,在一些紧急急需要分析主机.客户端的流量场景时,不懂协议也要上!下面就是用到哪里就记录到哪,有错误欢迎评论指出,多谢. wireshark这玩意相当于 ...

  6. java list集合遍历时删除元素

    转: java list集合遍历时删除元素 大家可能都遇到过,在vector或arraylist的迭代遍历过程中同时进行修改,会抛出异常java.util.ConcurrentModification ...

  7. ArrayList源码分析笔记

    ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...

  8. MVC模式从Controller返回内容协商格式(Json或者Xml)

    WebAPI默认的返回格式Json,但是MVC是View,如果在MVC的控制器中,想要返回Json格式该怎么操作呢 在MVC的控制器中返回json数据只需要然会JsonResult而不是ActionR ...

  9. Python爬虫系统化学习(5)

    Python爬虫系统化学习(5) 多线程爬虫,在之前的网络编程中,我学习过多线程socket进行单服务器对多客户端的连接,通过使用多线程编程,可以大大提升爬虫的效率. Python多线程爬虫主要由三部 ...

  10. 大数据实战-Hive-技巧实战

    1.union 和 union all 前者可以去重 select sex,address from test where dt='20210218' union all select sex,add ...