Day49-68 数据库 - 测验与作业
MySQL 基础测验
一、选择题
-
MySQL 中,用于存储引擎层日志的文件是?
- A. error.log
- B. binlog
- C. redolog
- D. undolog
-
InnoDB 存储引擎的索引数据结构是?
- A. Hash 表
- B. B+ 树
- C. 二叉树
- D. 红黑树
-
以下哪个不是 DDL 语句?
- A. CREATE
- B. ALTER
- C. INSERT
- D. DROP
-
GROUP BY 语句用于?
- A. 排序
- B. 分组
- C. 过滤
- D. 连接
-
UNION 与 UNION ALL 的区别是?
- A. 无区别
- B. UNION 去重
- C. UNION ALL 去重
- D. UNION 更快
二、填空题
- MySQL 约束中,PRIMARY KEY 表示________约束。
- SELECT 语句的执行顺序:FROM → WHERE → ________→ ORDER BY。
- InnoDB 存储引擎默认的隔离级别是________。
- 索引可以加速________操作,但会降低________操作的性能。
- VARCHAR(100) 表示最大存储________个字符。
三、简答题
-
简述 CHAR 和 VARCHAR 的区别。
-
什么是主键和唯一键的区别?
-
解释什么是外键约束及级联操作。
MySQL 进阶测验
一、选择题
-
B+ 树相比 B 树的优势是?
- A. 更矮
- B. 所有数据在叶子节点
- C. 支持范围查询
- D. 以上都是
-
EXPLAIN 输出中,以下哪个 type 类型最优?
- A. ALL
- B. index
- C. ref
- D. const
-
最左前缀原则适用于?
- A. 单列索引
- B. 联合索引
- C. 全文索引
- D. 空间索引
-
以下哪个场景会导致索引失效?
- A. LIKE ‘abc%’
- B. LIKE ‘%abc’
- C. 索引列参与运算
- D. B 和 C
-
覆盖索引是指?
- A. 主键索引
- B. 查询只需访问索引
- C. 全表扫描
- D. 联合索引
二、简答题
-
请描述 MySQL 的 MVCC 原理。
-
什么是脏读、不可重复读、幻读?
-
请说明 Redo Log 和 Binlog 的区别。
-
主从复制有哪几种模式?各有何优缺点?
-
如何优化深度分页查询?
Redis 测验
一、选择题
-
Redis 支持的数据类型有?
- A. String
- B. Hash
- C. List
- D. 以上都是
-
Redis 持久化方式 RDB 的特点是?
- A. 存储全部数据
- B. 存储增量命令
- C. 混合持久化
- D. 不支持
-
Redis 主从复制中,从库默认是?
- A. 只读
- B. 可写
- C. 视配置而定
- D. 不可配置
-
缓存穿透的原因是?
- A. 查询不存在的数据
- B. 热点数据过期
- C. 大量数据同时过期
- D. Redis 宕机
-
哨兵模式的作用是?
- A. 数据分片
- B. 自动故障转移
- C. 数据压缩
- D. 持久化
二、填空题
- Redis Cluster 将数据分为________个哈希槽。
- Redis 的 AOF 同步策略中,默认策略是________。
- 缓存击穿的解决方案之一是使用________锁。
- Redis 的数据类型中,用于实现排行榜的是________。
- 双写一致性方案中,Cache-Aside 模式是________缓存后删除缓存。
三、简答题
-
请简述 Redis 和 Memcached 的区别。
-
什么是缓存雪崩?如何解决?
-
请描述 Redis 主从复制的原理。
-
Redis Cluster 是如何实现数据分片的?
-
请说明延迟双删的原理及延迟时间如何计算。
答案
MySQL 基础答案
| 题号 | 答案 | 解析 |
|---|---|---|
| 1 | C | redolog 用于存储引擎层 |
| 2 | B | InnoDB 使用 B+ 树 |
| 3 | C | INSERT 是 DML |
| 4 | B | GROUP BY 用于分组 |
| 5 | B | UNION 去重 |
| 6 | 主键 | PRIMARY KEY |
| 7 | GROUP BY | 执行顺序 |
| 8 | REPEATABLE READ | RR 隔离级别 |
| 9 | 查询/写入 | 索引的权衡 |
| 10 | 100 | VARCHAR 定义长度 |
简答题答案:
-
CHAR vs VARCHAR
- CHAR:固定长度,不足用空格填充
- VARCHAR:可变长度,只存储实际字符
- CHAR 适合定长数据,VARCHAR 节省空间
-
主键 vs 唯一键
- 主键:唯一标识,每表一个,不允许 NULL
- 唯一键:唯一约束,可多个,允许 NULL
-
外键约束
- 外键用于建立表间关联
- 级联操作:CASCADE(级联删除/更新)、SET NULL、NO ACTION
MySQL 进阶答案
| 题号 | 答案 | 解析 |
|---|---|---|
| 1 | D | B+ 树具有以上所有优势 |
| 2 | D | const 最优(主键/唯一索引等值) |
| 3 | B | 最左前缀适用于联合索引 |
| 4 | D | B 和 C 都会导致索引失效 |
| 5 | B | 覆盖索引无需回表 |
简答题答案:
-
MVCC 原理
- 每行数据包含隐藏字段:事务 ID 和回滚指针
- 通过 Undo Log 形成版本链
- Read View 判断数据可见性
- RC 每次查询生成新 Read View,RR 复用首次 Read View
-
三种读现象
- 脏读:读取未提交事务的数据
- 不可重复读:同一事务内两次读取结果不同
- 幻读:同一事务内两次查询结果集不同
-
Redo Log vs Binlog
- Redo Log:物理日志,用于崩溃恢复
- Binlog:逻辑日志,用于主从复制
- Redo Log 在存储引擎层,Binlog 在 Server 层
-
主从复制模式
- 异步复制:性能高,可能丢数据
- 半同步复制:等待至少一个从库确认,平衡性能和数据安全
- 全同步复制:所有从库确认,性能最低
-
深度分页优化
- 延迟关联:先查主键再关联
- 游标分页:基于上一页最大 ID
- 覆盖索引:减少回表
Redis 答案
| 题号 | 答案 | 解析 |
|---|---|---|
| 1 | D | Redis 支持 String/Hash/List/Set/ZSet 等 |
| 2 | A | RDB 是全量快照 |
| 3 | A | 从库默认只读 |
| 4 | A | 查询不存在数据导致穿透 |
| 5 | B | 哨兵用于自动故障转移 |
| 6 | 16384 | Redis Cluster 槽位 |
| 7 | everysec | 每秒同步 |
| 8 | 互斥/分布式 | 防止击穿 |
| 9 | ZSet | 有序集合实现排行 |
| 10 | 先更新数据库 | Cache-Aside 流程 |
简答题答案:
-
Redis vs Memcached
- Redis:支持多种数据结构,有持久化,支持集群
- Memcached:纯 KV,仅内存存储,不支持持久化
-
缓存雪崩
- 原因:大量缓存同时过期
- 解决:过期时间随机化、多级缓存、限流熔断
-
主从复制原理
- 从库发送 PSYNC 命令
- 主库 BGSAVE 生成 RDB
- 发送 RDB 给从库
- 增量同步命令缓冲区
-
Redis Cluster 分片
- 16384 个哈希槽
- CRC16(key) % 16384 计算槽位
- 每个节点负责部分槽位
-
延迟双删原理
- 先删缓存 → 更新数据库 → 延迟 N 秒 → 再删缓存
- 延迟时间 = 读请求平均耗时 × 1.5 + 主从同步延迟