当前位置: 首页 > news >正文

MySQL常见面试题

一、存储引擎

  1. MySQL主要存储引擎及特点
引擎事务支持锁粒度特性适用场景
InnoDB行级锁默认引擎,支持MVCC、外键,崩溃恢复能力强高并发事务场景
MyISAM表级锁全文索引、压缩、空间函数,不支持事务读多写少,静态数据
Archive行级锁仅支持INSERT/SELECT,高压缩比日志存储,历史数据归档
Memory表级锁数据存内存,哈希索引,重启数据丢失缓存/映射表,中间结果集
  1. InnoDB vs MyISAM核心区别
  • 事务:InnoDB支持ACID事务,MyISAM不支持。
  • 锁机制:InnoDB行级锁(减少并发冲突),MyISAM表级锁(写阻塞读)。
  • 索引结构:InnoDB聚簇索引(数据存主键旁),MyISAM非聚簇索引(数据与索引分离)。
  • 外键:InnoDB支持,MyISAM不支持。

二、索引机制

  1. 索引类型与区别
  • 数据结构:B+树(范围查询)、Hash(等值查询)、全文索引(文本搜索)。
  • 逻辑分类
  • 主键索引:唯一且非空,聚簇索引(InnoDB)。
  • 唯一索引:列值唯一,可为NULL。
  • 联合索引:多列组合,遵循最左匹配原则。
  1. 为什么用B+树而非B树?
  • B+树非叶子节点仅存键值,增大了扇出(减少树高度)。
  • 叶子节点双向链表链接,支持高效范围查询。
  • 计算示例:3层B+树可存储约2200万行数据(主键8B+指针6B,每页16KB)。
  1. 覆盖索引与回表查询
  • 覆盖索引:查询字段均在索引中,无需回表(EXPLAIN显示Using index)。
  • 回表:需根据普通索引的主键ID回聚簇索引取数据,性能较低。
  1. 三星索引原则
  • ⭐ 索引行相邻(减少I/O)
  • ⭐⭐ 数据顺序与查询排序一致(避免排序)
  • ⭐⭐⭐ 包含查询所有字段(避免回表)

三、事务与锁

MySQL 是一个客户端/服务器架构的软件。同一个服务器可以有多个客户端连接,每个连接称为一个会话(Session)。每个会话中的客户端都可以向服务器发出请求语句,这些请求可能属于不同的事务,因此服务器可能同时处理多个事务。

  1. ACID实现原理
特性实现机制
原子性Undo Log:回滚未提交事务的修改。
持久性Redo Log:事务提交前写日志,崩溃恢复时重放。
隔离性MVCC+锁:Read View控制可见性,行锁保证写隔离。
一致性由原子性、隔离性、持久性共同保证。
  1. 事务隔离级别与问题
隔离级别脏读不可重复读幻读实现方式
读未提交无锁
读已提交每次快照读生成新Read View
可重复读⚠️首次快照读生成Read View(默认)
串行化读写均加锁

可以通过以下语句修改事务的隔离级别:

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level;

其中 level 可选值:

level: {
REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE
}

原文链接:https://blog.csdn.net/qq_26893655/article/details/149711697

幻读特殊处理:InnoDB通过Next-Key Lock(Gap Lock+Record Lock)在RR级别避免幻读。

  1. 锁类型
  • 行级锁
    • Record Lock:锁定单行。
    • Gap Lock:锁定范围间隙(防插入)。
    • Next-Key Lock:锁定范围+行(默认)。
  • 表级锁
    • MDL锁:元数据锁(DDL阻塞DML)。
    • AUTO-INC锁:自增主键插入锁。

四、SQL优化与设计

  1. 表设计原则
  • 字段选择:最小数据类型 > 避免NULL > 简单类型(如整型优于字符串)。
  • 货币存储:DECIMAL(精确)或 BIGINT(扩大倍数存整数)。
  • 字符串类型:
    • VARCHAR:变长字符串(省空间)。
    • CHAR:定长字符串(如邮编)。
    • 避免TEXT/BLOB:分表存储或合成索引。
  1. 索引优化策略
  • 避免索引失效:
    • ❌ 对索引列计算/函数:WHERE YEAR(create_time)=2023
    • ❌ 隐式类型转换:WHERE id='100'(id为整型)
  • 利用虚拟生成列:
ALTER TABLE users ADD name_hash BINARY(16) AS (UNHEX(MD5(name))) VIRTUAL;
CREATE INDEX idx_name_hash ON users(name_hash);
  1. 大表优化方案
  • 分页查询
-- 避免OFFSET 50000,改用ID过滤
SELECT * FROM orders WHERE id > 50000 LIMIT 200;
  • 关联查询
-- 先查小表ID,再关联大表
SELECT b.* FROM big_table b
JOIN (SELECT id FROM small_table LIMIT 50000,200) a ON b.id = a.id;

五、高阶机制

  1. 日志系统
日志作用关键特性
Redo保证事务持久性物理日志,循环写,崩溃恢复重放
Undo事务回滚和MVCC逻辑日志,链式存储版本链
Binlog主从复制和数据归档逻辑日志,追加写,支持ROW/STATEMENT
  1. InnoDB三大特性
  • Buffer Pool:缓存数据页,LRU算法管理。
  • 自适应哈希索引:自动为高频查询字段建哈希索引。
  • 双写缓冲区:防止页断裂(Partial Page Write)。
  1. MySQL 8.0重要特性
  • 原子DDL操作(DDL失败自动回滚)。
  • 降序索引(真正物理降序存储)。
  • 窗口函数(ROW_NUMBER(), RANK())。
  • 通用表表达式CTE(WITH RECURSIVE)。

六、高频面试题

  1. VARCHAR(50)能存多少汉字?
  • UTF8:每个汉字3字节 → 最大存 (65535-1-2)/3 ≈ 21844个(无NOT NULL)。
  1. 自增主键的优势
  • 插入顺序写入,减少页分裂 → 比随机主键(如UUID)性能高30%。
  1. 死锁处理
  • 设置innodb_lock_wait_timeout(默认50s)。
  • 开启死锁检测(innodb_deadlock_detect=ON),自动回滚代价小的事务。
  1. 分区表 vs 分表
方案优点缺点
分区表单表逻辑透明分区键限制,全局锁风险
分表水平扩展灵活需应用层路由
  1. 索引失效的11个场景
  • 范围查询右侧失效
WHERE a>10 AND b=20-- 联合索引(a,b)中b失效
  • 隐式类型转换
WHERE id = '100'-- id为整型时触发全表扫描
  • 函数操作索引列
WHERE UPPER(name)='JOHN'
  • OR连接非索引列
WHERE a=10 OR d='foo'-- d无索引则全索引失效
  • LIKE通配符开头
WHERE name LIKE '%abc'

6.自增主键不连续原因

  • 事务回滚(自增值不回收)
  • 唯一键冲突(已分配ID废弃)
插入ID=10
唯一键冲突?
ID=10废弃
写入成功
下次分配ID=11

7.NULL值对索引的影响

  • WHERE col IS NULL 可走索引
  • COUNT(col) 忽略NULL值(推荐 COUNT(*)

附:速查公式

  • B+树容量总行数 = 1170^(h-1) * 16(h为树高度,1170为单页指针数)
  • 索引长度UTF8字段索引长度 = 字符数×3 + 2(变长字段额外字节)

完整知识图谱

MySQL体系
存储引擎
索引机制
事务锁
SQL优化
InnoDB
MyISAM
B+树原理
覆盖索引
MVCC
Next-Key Lock
执行计划
分区分表

详细资料请关注面试专栏
在这里插入图片描述

http://www.dtcms.com/a/306072.html

相关文章:

  • springboot本地访问https链接,证书错误
  • Spark的宽窄依赖
  • Kubernetes 中 ConfigMap 与 Secret 的深度解析
  • gaussdb demo示例
  • Spring Cloud Gateway静态路由实战:Maven多模块高效配置指南
  • 时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式
  • ES 文件浏览器:多功能文件管理与传输利器
  • 数据建模怎么落地?从概念、逻辑到物理模型,一文讲请!
  • Kubernetes高级调度02
  • 《超级秘密文件夹》密码遗忘?试用版/正式版找回教程(附界面操作步骤)
  • AI任务相关解决方案11-基于 Qwen3+langchain+Agent 的学术论文编辑平台系统搭建与开发案例
  • Redis学习------缓存穿透
  • 【Python系列】如何安装无 GIL 的 Python 3.13
  • 区块链、Web3、元宇宙与AI融合的安全挑战:2025年深度分析
  • ICODE SLIX2有密钥保护的物流跟踪、图书馆管理ISO15693标签读写Delphi源码
  • 第七章:进入Redis的SET核心
  • 论文阅读:《多目标和多目标优化的回顾与评估:方法和算法》
  • 算法思想之 BFS 解决 最短路问题
  • Zookeeper符合cap中的AP还是CP
  • 【科研绘图系列】R语言绘制绝对量柱状堆积图+环形图数量统计+特数量标注
  • Python并发与性能革命:自由线程、JIT编译器的深度解析与未来展望
  • 【JVM篇11】:分代回收与GC回收范围的分类详解
  • ADA4622-2ARMZ-R7 ADI双通道精密运算放大器 ±0.25μV超低失调+0.1μV/°C温漂
  • OpenBayes 教程上新丨仅激活 3B 参数可媲美 GPT-4o,Qwen3 深夜更新,一手实测来了!
  • Vue3 Composition API
  • 独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升
  • 八种AI记忆术,重构智能体的“大脑”
  • Unity_XR控制手部动画
  • RFID 系统行业前沿洞察:技术跃迁与生态重构
  • 国内好用的智能三防手机,适合户外、工业、公共安全等场景