MySQL面试题--MySQL内部技术架构

目录

1.Mysql内部支持缓存查询吗?

2.MySQL8为何废弃掉查询缓存?

3.替代方案是什么?

4.Mysql内部有哪些核心模块组成,作用是什么?

5.一条sql发送给mysql后,内部是如何执行的?(说一下 MySQL 执行一条查询语句的内部执行过程?)

6.MySQL 提示“不存在此列”是执行到哪个节点报出的?

7.如果一张表创建了多个索引,在哪个阶段或模块进行的索引选择?

8.MySQL 支持哪些存储引擎?默认使用哪个?

9.Mysql8.0自带哪些存储引擎?分别是做什么的?

10.MySQL 存储引擎架构了解吗?

11.能否单独为一张表设置存储引擎?

12.阿里、京东等大厂都有自研的存储引擎,如何开发一套自己的?

13.MyISAM 和 InnoDB 的区别是什么?

14.具体说一下如何做技术选型

1.Mysql内部支持缓存查询吗?

当MySQL接收到客户端的查询SQL之后,仅仅只需要对其进行相应的权限验证之后,就会通过Query Cache来查找结果,甚至都不需要经过Optimizer模块进行执行计划的分析优化,更不需要发生任何存储引擎的交互

mysql5.7支持内部缓存,8.0之后就废弃掉了

2.MySQL8为何废弃掉查询缓存?

缓存的意义在于快速查询提升系统性能,可以灵活控制缓存的一致性

mysql缓存的限制

  1. mysql基本没有手段灵活的管理缓存失效和生效,尤其对于频繁更新的表

  2. SQL必须完全一致才会导致cache命中

  3. 为了节省内存空间,太大的result set不会被cache (< query_cache_limit);

  4. MySQL缓存在分库分表环境下是不起作用的;

  5. 执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的;

  6. 在表的结构或数据发生改变时,基于该表相关cache立即全部失效。

3.替代方案是什么?

应用层组织缓存,最简单的是使用redis,ehcached等

  1. 应用程序层面的缓存:在应用程序中实现缓存逻辑,可以更灵活地控制缓存的生命周期和内容。

  2. 使用第三方工具:例如ProxySQL,它可以作为中间件来缓存查询结果,并且支持缓存的TTL(生存时间),这样可以在一定程度上模拟查询缓存的功能。

  3. 服务器端查询重写:MySQL服务器提供了查询重写功能,可以通过重写查询来插入提示或进行其他修改以提高性能。

  4. 优化索引和查询:通过优化数据库的索引和查询逻辑来提升性能,减少对查询缓存的依赖。

  5. 使用其他数据库技术:如果查询缓存对应用程序非常关键,可以考虑使用其他支持查询缓存的数据库技术。

4.Mysql内部有哪些核心模块组成,作用是什么?

Connectors(客户端)

MySQL服务器之外的客户端程序,与具体的语言相关,例如Java中的JDBC,图形用户界面SQLyog等。本质上都是在TCP连接上通过MySQL协议和MySQL服务器进行通信。

MySQL Server(服务器)

第1层:连接层

  • 系统(客户端)访问 MySQL 服务器前,做的第一件事就是建立 TCP 连接

  • 经过三次握手建立连接成功后, MySQL 服务器对 TCP 传输过来的账号密码做身份认证、权限获取

    • 用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行

    • 用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限

  • TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。

第2层:服务层

Management Serveices & Utilities: 系统管理和控制工具

SQL Interface:SQL接口:

  • 接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT ... FROM就是调用SQL Interface

  • MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口

Parser:解析器:

  • 在SQL命令传递到解析器的时候会被解析器验证和解析。解析器中SQL 语句进行语法分析、语法解析,并为其创建语法树

语法分析

语法分析主要是把输入转化成若干个tokens,包含key和非key。

在分析之后,会得到4个Token,其中有2个key,它们分别是SELECT、FROM。

key 非key key 非key
SELECT age FROM
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

共勉浩浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值