问题:请讲下对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. C语言数据类型思维导图

  2. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  3. MPAndroidChart实现LineChart(折线图)

    一.参照油管视频做法 1.引入依赖 新建Android工程,然后分别在build.gradle(Project:...)添加 maven { url 'https://jitpack.io' } 在b ...

  4. Maven遇到的各种问题

    1.遇到报错-Dmaven.multiModuleProjectDirectory system propery is not set.Check $M2_HOME environment varia ...

  5. docker mysql初始化多个sql脚本

    一.概述 现有一台服务器,需要部署mysql.其中mysql容器,需要在第一次启动时,执行多个sql文件. 文件名 说明 执行顺序 init.sql 创建数据库以及用户 1 users.sql 用户表 ...

  6. Nginx解析漏洞复现以及哥斯拉连接Webshell实践

    Nginx解析漏洞复现以及哥斯拉连接Webshell实践 目录 1. 环境 2. 过程 2.1 vulhub镜像拉取 2.2 漏洞利用 2.3 webshell上传 2.4 哥斯拉Webshell连接 ...

  7. 第十届蓝桥杯省赛-试题E: RSA 解密

    试题E: RSA 解密 这里涉及到很多数论的知识:质因子分解,扩展欧几里得算法,快速幂算法,利用快速乘算法求解快速幂(mod太大导致不能直接乘,而是需要使用加法来替代乘法) 另外还需要注意扩展欧几里得 ...

  8. Elasticsearch 为了搜索

    前言 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库--无论是开源还是 ...

  9. mongodb 聚合(Map-Reduce)

    介绍 Map-reduce 是一种数据处理范式,用于将大量数据压缩为有用的聚合结果.对于 map-reduce 操作,MongoDB 提供MapReduce数据库命令. MongoDB中的MapRed ...

  10. HTML基础速览

    HTML概述 HTML ,CSS , JavaScript, JQuery, Vue 的关系 HTML可以写一个简单的前端,但是很丑,所以需要CSS对HTML进行美化 HTML是静态的.JavaScr ...