(三)征服MySQL面试:30+高频核心问题深度剖析与实战指南

发布于:2025-03-06 ⋅ 阅读:(113) ⋅ 点赞:(0)

一、为什么MySQL是面试的"必答题"?

  • 数据库领域占比:MySQL占据全球关系型数据库市场份额Top 3,阿里、腾讯、美团等大厂核心系统深度依赖
  • 技术栈深度检验:通过MySQL问题可考察候选人的数据结构理解系统设计能力性能优化思维三大维度
  • 薪资挂钩指标:P6+/35k+岗位面试中,90%会涉及MySQL底层原理与高并发场景解决方案

MySQL中,如何定位慢查询? (先找到哪个sql查询的慢)

慢查询常用工具

1部署了运维的监控系统Skywalking ,在展示的报表中可以看到是哪一个接口比较慢,可以分析这个接口哪部分比较慢,可以看到SQL的具体的执行时间,可以定位是哪个sql出了问题

2.MySQL自带慢日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置;

SQL语句执行很慢, 如何分析呢? (再分析为什么慢)

采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息

mysql 的 explain 执行结果

用mysql自动的执行计划 explain来去查看这条sql的执行情况,比如在这里面可以通过key和key_len检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效的情况,第二个,可以通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描,第三个可以通过extra建议来判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复;

possible_key: 当前sql可能会使用到的索引

key :当前sql实际命中的索引

key_len: 索引占用的大小

Extra :额外的优化建议

type: 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、 index、all;

system:查询系统中的表

const:根据主键查询

eq_ref:主键索引查询或唯一索引查询

ref:索引查询

range:范围查询

index:索引树扫描

all:全盘扫描

什么是索引 ?

主要是用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低了CPU的消耗‘

MYSQL支持的存储引擎有哪些, 有什么区别 ?

搜索引擎区别

InnoDB:mysql5.5之后是默认的引擎,它支持事务、外键、表级锁和行级锁

MyISAM:它不支持事务、只有表级锁、也没有外键,用的不多

Memory:主要把数据存储在内存,支持表级锁,没有外键和事务,用的不多

索引的底层数据结构 ?

MySQL的默认的存储引擎InnoDB采用的B+树的数据结构来存储索引,选择B+树的主要的原因是:第一阶数更多,路径更短,第二个磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据,第三是B+树便于扫库和区间查询,叶子节点是一个双向链表;、

B树和B+树的区别是什么呢?

第一:在B树中,非叶子节点和叶子节点都会存放数据,而B+树的

所有的数据都会出现在叶子节点,在查询的时候,B+树查找效率更加稳定

第二:在进行范围查询的时候,B+树效率更高,因为B+树都在叶子节点存

储,并且叶子节点是一个双向链表

B树与B+树对比:

①:磁盘读写代价B+树更低;②:查询效率B+树更加稳定;③:B+树便于扫库和区间查询

B树 :B树每个节点可以有多个分支,即多叉

B+树

为什么MySQL默认使用B+树而不是B树或哈希表?

  • 核心差异
    • B树:每个节点存储键值和数据,导致单个节点存储的键值少,树的高度较高,查询时磁盘I/O次数多。
    • B+树:数据只存储在叶子节点,非叶子节点仅存键值,单个节点可存储更多键值,树的高度更低;叶子节点形成链表,范围查询效率提升5倍以上
    • 哈希表:适合等值查询(O(1)),但无法支持范围查询和排序,且哈希冲突处理代价高。
  • 延伸问题
-- 验证索引页大小(默认16KB)
SHOW VARIABLES LIKE 'innodb_page_size';
  • 页大小设计:16KB平衡了内存利用率与磁盘I/O效率,B+树高度为3时可存储约 2000万行数据

网站公告

今日签到

点亮在社区的每一天
去签到