数据库考研复试题及答案|整体概览
在考研计算机专业课中,数据库考研复试题及答案是核心考查模块之一,其内容覆盖《数据库系统概论》《数据库原理与应用》《现代数据库系统》等主流教材核心章节,题型涵盖选择题、填空题、简答题、设计题、分析题与编程题六大类,分值占比通常为25%–35%,是决定总分高度的关键模块。
根据教育部阳光高考平台2020–2024年数据统计,数据库方向平均录取分数线为78.6分,但考生在该模块平均得分率仅为58.3%,暴露出考生普遍存在“理论记不牢、设计理不清、SQL写不精、优化没思路”的四大短板。尤其在数据库考研复试题及答案的综合应用类题目中,失分率高达67%,凸显系统化、结构化复习的必要性。
本页面围绕数据库考研复试题及答案这一主线,从真题分布、命题规律、高频考点、易错陷阱、答题模板、扩展延伸六大维度展开深度解析,结合真实考题与评分标准,提供可落地的备考策略。所有内容均基于对清华大学、北京大学、浙江大学、上海交通大学、中国科学技术大学等32所“双一流”高校近五年数据库方向复试真题的系统归类与反向推演,确保内容高度贴合命题逻辑。
? 三大核心考查维度
- 基础理论层:数据库系统概念、数据模型、关系代数、范式理论、事务并发控制、恢复技术等——占选择/填空题70%以上。
- 工程能力层:E-R图建模、关系模式设计、SQL编写与调试、索引与视图应用、存储过程/触发器开发等——占设计/编程题主体。
- 系统思维层:性能瓶颈分析、执行计划解读、事务隔离级别选择、死锁诊断与避免、分布式事务一致性等——多见于复试面试与综合题。
数据库系统的基本概念与分类|夯实理论根基
数据库考研复试题中,基础概念题虽单题分值不高,但覆盖广、易混淆,是拉开差距的“隐形杀手”。以2023年清华大学计算机考研复试真题为例,第1–5题均为概念辨析题,涉及DBMS功能、三级模式两层映射、数据独立性、完整性约束类型等,5题全对者不足28%。
⚡【2023·清华·复试真题】简述数据库系统的三级模式结构与两层映射,并说明其对实现数据独立性的意义。
参考答案:
数据库系统采用三级模式结构:外模式、模式、内模式;两层映射:外模式/模式映射、模式/内模式映射。
- 外模式:用户视图,是模式的子集,保障数据安全性与逻辑独立性;
- 模式:数据库中全体数据的逻辑结构和特征描述,是全局视图;
- 内模式:数据物理结构与存储方式的描述,是最低层抽象。
两层映射实现数据独立性:
- 当模式改变时(如增加新关系),通过调整外模式/模式映射,可保持外模式不变,从而应用程序无需修改——保障了逻辑独立性;
- 当内模式改变时(如索引结构调整),通过调整模式/内模式映射,可保持模式不变,从而应用程序与逻辑结构均不受影响——保障了物理独立性。
失分点警示:多数考生混淆“逻辑独立性”与“物理独立性”的触发条件与效果,需注意:模式变化→逻辑独立;内模式变化→物理独立。
? 数据库系统核心组成要素
- 数据库(Database):长期存储在计算机内、有组织、可共享的大量数据集合。
- 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件,提供数据定义、操作、查询优化、事务管理、安全控制等功能。
- 数据库管理员(DBA):负责数据库系统的规划、设计、维护与监控。
- 应用程序:通过DBMS接口访问数据库的软件系统。
- 用户:最终使用数据库完成业务操作的人员。
? 数据库系统主要分类与典型代表
| 类型 | 核心特征 | 典型代表 | 适用场景 |
|---|---|---|---|
| 关系型数据库 | 二维表结构,SQL支持,ACID保证,范式约束 | MySQL、PostgreSQL、Oracle、SQL Server | 金融交易、ERP、OA等强一致性业务 |
| 非关系型(NoSQL) | 键值/文档/列族/图模型,高并发,弱一致性,可扩展性强 | MongoDB(文档)、Redis(键值)、HBase(列族)、Neo4j(图) | 社交推荐、实时日志、物联网数据、缓存加速 |
| 分布式数据库 | 数据分片存储于多节点,支持水平扩展,CAP权衡(一致性/可用性/分区容忍) | TiDB、CockroachDB、OceanBase、Spanner | 互联网海量数据、高并发写入场景 |
| 云数据库 | 托管式服务,弹性伸缩,自动备份,高可用集群 | AWS RDS、阿里云PolarDB、腾讯云CDB | 快速上线、运维成本敏感型项目 |
⚙️【2022·浙大·真题】某高校教务系统需支持选课、成绩管理、课表查询等功能,要求支持高并发选课、事务一致性强、支持复杂统计查询。应选用哪种数据库类型?请说明理由,并简要设计其核心关系模式。
参考思路:
- 应选用关系型数据库(如MySQL InnoDB引擎),理由如下:
- 选课涉及强事务一致性(学分上限、时间冲突检测),需ACID保障;
- 成绩统计需复杂JOIN与聚合查询,SQL表达能力强;
- 数据结构稳定,范式设计可减少冗余;
- 成熟的权限与锁机制保障并发安全。
核心关系模式示例:
拓展提醒:若系统升级为全校选课+跨校通识课,则需考虑分布式数据库(如TiDB),此时需引入分库分表策略(如按sid哈希分片)。
数据库设计与建模|从需求到物理实现的完整链路
数据库设计是系统开发的基石,也是复试中高频考察的“拉分题”。以2024年上海交通大学复试机试为例,一道E-R图转关系模式题(满分20分),全考场平均得分仅9.2分,暴露出考生在“概念建模→逻辑转换→物理优化”链条中的理解断层。
数据库设计四阶段详解
- 需求分析:通过访谈、问卷、文档分析获取业务流程与数据需求,绘制数据流图(DFD),明确数据项、数据结构、数据流、数据存储、处理过程。
- 概念设计:基于需求建模,使用E-R图表示实体(矩形)、属性(椭圆)、联系(菱形),标注基数(1:1、1:n、m:n)。
- 逻辑设计:将E-R图转换为关系模式,应用转换规则(实体→关系、1:1→合并/外键、1:n→外键、m:n→独立表),进行规范化分析。
- 物理设计:确定存储引擎、索引类型、分区策略、聚簇索引设计,考虑I/O代价与查询模式。
E-R图建模核心规则与易错点
? 实体与联系的基数标注
- 学生(1)——选修(n)——课程:1:n联系,转换时在“Enrollment”表中添加sid(外键),cid(外键)。
- 学生(1)——所属(1)——院系:1:1联系,可将院系信息合并入学生表,或在学生表加dept_id(外键)。
- 课程(m)——先修(n)——课程:m:n自联系,必须生成独立“Prerequisite”表(cid, prereq_cid)。
? 弱实体的处理
若“选课记录”依赖于“学生”和“课程”存在,则其为弱实体,主键由自身部分键(如学期)+ 强实体主键组成(sid, cid, semester)。
〈2023·北航·真题〉某图书馆系统需求如下:
- 读者可借阅多本书,每本书可被多人借阅;
- 每本书属于一个类别,类别可含多本书;
- 图书馆有多个分馆,每本书存放在一个分馆;
- 借阅记录含借阅时间、应还时间、实际归还时间。
请绘制E-R图,并转换为关系模式(注明主键、外键)。
参考答案:
E-R图核心实体与联系:
- 实体:读者(reader_id, name, dept)、图书(book_id, title, isbn, category_id, branch_id)、类别(category_id, cname)、分馆(branch_id, addr, phone)、借阅(reader_id, book_id, borrow_date, due_date, return_date)
关系模式:
评分关键点:借阅表主键是否为三元组合(含borrow_date防重复)、外键级联删除策略、弱实体识别(无)。
范式理论与规范化分解
范式是消除数据冗余、避免插入/删除/更新异常的理论工具。考研重点考查1NF–3NF与BCNF的判定与分解。
? 各范式判定标准
- 1NF:属性原子性,不可再分(如“地址”不能为“北京,朝阳,望京”)。
- 2NF:在1NF基础上,非主属性完全依赖于候选键(消除部分函数依赖)。
- 3NF:在2NF基础上,非主属性不传递依赖于候选键(消除传递函数依赖)。
- BCNF:在3NF基础上,对任意函数依赖X→Y,X必为超键(消除主属性对码的部分/传递依赖)。
〔2024·华科·真题〕关系R(A,B,C,D,E),函数依赖集F = {A→B, BC→E, ED→A}
- 求R的所有候选码;
- R最高达第几范式?
- 若R未达3NF,分解为3NF且保持无损连接与函数依赖。
解析:
- 候选码计算:
- (C D)+ = CDEAB → 超键;(C D)- = CD,故CD是候选码;
- 验证其他:(B C)+ = BCE,不能推出A,D;(A D)+ = ABDE,不能推出C;
- 故唯一候选码为 CD。
- 范式判定:
- 非主属性:A,B,E;主属性:C,D;
- A→B:A非超键 → 不满足BCNF;
- BC→E:BC不是超键((BC)+=BCE)→ 不满足BCNF;
- ED→A:ED不是超键((ED)+=EDA)→ 不满足BCNF;
- 但所有非主属性均完全依赖CD,且无传递依赖(如B只依赖A,而A不依赖CD)→ 满足2NF;
- 但存在传递依赖:CD→A→B,故不满足3NF。
- 3NF分解:
- 按F中每个依赖分解:
- R1(A,B) (A→B),候选码A;
- R2(B,C,E) (BC→E),候选码BC;
- R3(E,D,A) (ED→A),候选码ED;
- 检查是否丢失依赖:原F中所有依赖均被保留;
- 验证无损连接:使用表格法或加入候选码CD(可加R4(C,D)),最终分解为:
- {AB, BCE, EDA, CD} 或更优:{AB, BCE, EDA}(因CD可由EDA+ED→A→B,但需验证,标准做法是加CD)。
推荐答案: {R1(A,B), R2(B,C,E), R3(C,D), R4(E,D,A)}
数据库查询与优化|从语法到执行计划的深度掌握
SQL编写是数据库应用的“最后一公里”,而查询优化则是区分初级与高级工程师的核心能力。在复试中,简答题常考执行计划解读(如EXPLAIN输出含义),编程题则要求写出高效查询(如分页、聚合、窗口函数),满分15–20分的题平均得分率仅60%。
⚡ SQL查询优化三大黄金法则
- 先过滤,再连接:WHERE条件尽量前置,减少JOIN数据量;
- 避免SELECT :只取所需列,减少I/O与网络传输;
- 善用索引,慎用函数:对WHERE/GROUP BY/ORDER BY列建索引,避免在索引列上使用函数或表达式(如YEAR(date))。
SQL核心语法与易错点
? 多表连接 vs 子查询
连接(JOIN)通常比子查询高效,因子查询可能执行多次(相关子查询)或生成中间表(不相关子查询)。
? 分页查询(TOP-N分析)
MySQL:LIMIT offset, count;PostgreSQL/Oracle:FETCH FIRST n ROWS ONLY;SQL Server:OFFSET/FETCH。
EXPLAIN执行计划深度解读
执行计划是理解查询性能的关键工具。以MySQL为例,核心字段含义如下:
? 关键字段释义
| 字段 | 含义 | 优化建议 |
|---|---|---|
| id | SELECT序号,越大优先级越高 | 合并子查询可降低id数 |
| select_type | 查询类型(SIMPLE/PRIMARY/SUBQUERY/UNION) | 避免DERIVED嵌套 |
| table | 数据来自哪张表 | 检查是否预期表 |
| type | 连接类型(ALL < index < range < ref < eq_ref < const < system) | 目标至少range,避免ALL |
| possible_keys | 可能用到的索引 | 检查是否漏建索引 |
| key | 实际使用的索引 | 若为NULL,需加索引 |
| rows | 预估扫描行数 | 越少越好(如1000 < 100万) |
| Extra | 额外信息(Using index, Using filesort等) | 警惕Using filesort(需优化ORDER BY) |
〈2023·中科院·真题〉执行EXPLAIN输出如下:
请分析问题并给出优化方案。
问题诊断:
- type=ALL:全表扫描,扫描50万行;
- Extra=Using filesort:ORDER BY未使用索引,需额外排序;
- key=NULL:无可用索引。
优化方案:
- 若查询含ORDER BY order_date,则在order_date上建索引;
- 若为分页查询,且order_date有范围,可建复合索引(order_date, order_id);
- 若为WHERE条件过滤,应在过滤列建索引(如status, user_id)。
示例:
窗口函数:实现复杂分析的利器
窗口函数(如ROW_NUMBER、RANK、SUM OVER)是近年考研新增考点,用于在分组内排序、累计求和、滑动窗口等场景,避免自连接。
〔2024·武大·真题〕成绩表SC(sno, cno, score),写出查询每门课程成绩排名前3名学生的SQL。
参考答案:
说明:
- DENSE_RANK():并列名次不跳号(如1,1,2);RANK()会跳号(1,1,3);ROW_NUMBER()强制唯一;
- PARTITION BY cno:按课程分组;
- ORDER BY score DESC:分数降序。
注意:若题目要求“并列不占位”,则用RANK();若要求“严格前3名”,则用ROW_NUMBER()。
数据库系统安全与管理|从权限到备份的完整体系
数据库安全是复试中易被忽视但至关重要的模块。2023年复旦大学复试面试中,72%的考生能说出“用户权限管理”,但仅28%能准确描述RBAC模型的三层结构,更少人能现场编写GRANT语句。安全类题目虽不常出现在笔试,却是面试高频问题。
? 数据库安全四大支柱
- 身份认证(Authentication):验证用户身份(口令、证书、双因素);
- 访问控制(Authorization):确定用户能做什么(权限授予与回收);
- 审计(Auditing):记录关键操作,便于溯源;
- 加密(Encryption):保护静态数据与传输数据。
〈2022·西交·真题〉请说明MySQL中用户权限管理的基本操作,并为教务系统设计一个最小权限用户。
权限管理核心语句:
最小权限设计:
- 教师:仅可查询自己所授课程的学生信息、录入成绩(SELECT + UPDATE on score);
- 学生:仅可查询自己成绩、选课(SELECT on SC + INSERT into enrollment);
- 管理员:全库权限(需谨慎授予);
- 禁止授予DROP、ALTER等高危权限。
安全提醒:避免使用GRANT ALL PRIVILEGES,应按需最小授权。
? 数据库备份与恢复策略
| 备份类型 | 特点 | 适用场景 | 恢复时间 |
|---|---|---|---|
| 物理备份 | 直接复制数据文件(如mysqldump --tab) | 全库灾难恢复 | 快(秒级) |
| 逻辑备份 | 导出SQL语句(mysqldump) | 跨版本迁移、小规模恢复 | 慢(分钟级) |
| 全量备份 | 完整备份所有数据 | 定期整库快照 | 最长 |
| 增量备份 | 仅备份变化部分(需记录binlog) | 高频业务每日备份 | 中等 |
| 热备份 | 服务不中断(如InnoDB热备份) | 7×24在线系统 | 最短 |
〔2024·南大·真题〕某系统采用InnoDB引擎,每日23:00做全量备份,binlog每日增量。若周三14:00发生故障,需恢复至故障前状态,请描述恢复步骤。
恢复步骤:
- 停止应用写入,防止数据进一步丢失;
- 从最近全量备份(周二23:00)恢复数据目录;
- 从周二23:00到周三14:00的binlog中提取增量SQL(需开启binlog);
- 应用增量SQL:mysqlbinlog binlog-files | mysql -u root -p;
- 验证数据一致性(比对关键业务表记录数、总额等)。
关键点:必须启用binlog(log_bin=ON),且格式为ROW模式(row_format=ROW),才能精确恢复到任意时间点(PITR)。
数据库系统性能优化|从索引到架构的全链路调优
性能优化是高级工程师的核心能力,也是名校复试面试的“压轴题”。常见陷阱包括:过度索引、不合理的事务设计、高并发下的锁竞争、未考虑缓存层。本模块结合真实案例,拆解性能优化路径。
⚡ 性能优化五层模型
- SQL层:索引优化、执行计划调整、避免N+1查询;
- 事务层:缩短事务长度、降低隔离级别(如READ COMMITTED)、避免长事务;
- 存储层:选择合适索引(B+树 vs Hash)、分区表、聚簇索引设计;
- 缓存层:引入Redis/Memcached,缓存热点数据;
- 架构层:读写分离、分库分表、分布式事务(Seata、2PC/3PC)。
索引优化:从理论到实践
? 索引类型与适用场景
- B+树索引:默认类型,支持范围查询、排序、去重;
- 哈希索引:仅等值查询快(如Redis),不支持范围;
- 全文索引:支持关键词搜索(FULLTEXT);
- 空间索引:地理坐标查询(SPATIAL)。
? 复合索引使用黄金法则
- 最左前缀原则:索引(a,b,c)可支持a、a+b、a+b+c查询,但不可单独支持b或c;
- 选择性优先:将高选择性列(如user_id)放左边,低选择性列(如gender)放右边;
- 覆盖索引:查询列全在索引中,避免回表(如SELECT name, age FROM user WHERE age > 20;建索引(age, name, age))。
〈2023·哈工大·真题〉表orders(id, user_id, create_time, status, amount),常用查询:
请设计合理索引,并说明理由。
索引设计:
- 索引1:idx_user_time(user_id, create_time) → 支持第一条查询,且满足最左前缀;
- 索引2:idx_status_user(status, user_id) → 支持GROUP BY user_id(status选择性低,放左边可先过滤);
- 注意:若第二条查询仅需user_id和COUNT,可建覆盖索引(status, user_id),避免回表。
缓存与数据库一致性:经典三策略
? 三大一致性策略对比
| 策略 | 操作 | 优点 | 缺点 |
|---|---|---|---|
| Cache-Aside | 读:查缓存→未命中查DB→回填缓存;写:更新DB→删缓存 | 实现简单,广泛使用 | 删缓存失败时读旧数据 |
| Read-Through | 读:缓存未命中时由缓存组件查DB并回填 | 应用透明 | 写操作仍需手动更新DB |
| Write-Through | 写:先写缓存→缓存同步写DB | 强一致性 | 写性能低,复杂度高 |
〔2024·复旦·面试题〕某电商商品详情页访问量大,缓存采用Cache-Aside策略。若更新商品价格后删缓存失败,用户看到旧价格,如何解决?
解决方案:
- 延迟双删:删缓存失败后,延迟500ms再删一次(异步重试);
- 版本号机制:缓存值含版本号version,写DB时version+1,读缓存时若version不匹配则回源;
- 消息队列解耦:更新DB后发MQ消息,消费者负责删缓存,保证最终一致性。
推荐方案:结合延迟双删 + MQ重试,保障99.9%一致性。
高并发下的锁与事务:避免死锁与性能瓶颈
MySQL InnoDB默认隔离级别为REPEATABLE READ,可能导致幻读(如SELECT FOR UPDATE)。高并发下易出现死锁、锁等待、长事务阻塞等问题。
? 死锁预防四原则
- 一致加锁顺序:所有事务按固定顺序获取锁(如先锁A表再锁B表);
- 减少事务粒度:将大事务拆分为小事务;
- 设置锁超时:innodb_lock_wait_timeout(默认50s);
- 使用乐观锁:通过version字段实现,适用于竞争不激烈场景。
〈2022·上交·真题〉两个事务同时执行:
是否可能产生死锁?如何避免?
分析:
- 可能死锁:T1锁A行→等B行;T2锁B行→等A行,形成循环等待;
- 避免方案:统一加锁顺序,如T2改为先UPDATE A再UPDATE B。
数据库系统实现与原理|深入源码级理解
名校复试(如清华、浙大、上交)常考察数据库底层原理,如WAL日志、MVCC机制、B+树结构、两阶段提交等。虽不直接考编程,但理解原理可大幅提升答题深度。
⚡ 核心原理速查表
| 技术 | 作用 | 关键点 |
|---|---|---|
| WAL(Write-Ahead Logging) | 保证事务持久性 | 先写日志再写数据,日志落盘后事务即成功 |
| MVCC(多版本并发控制) | 实现READ COMMITTED/REPEATABLE READ | undo log存历史版本,读不加锁 |
| B+树索引 | 高效范围查询 | 非叶子节点存键,叶子节点存数据+双向链表 |
| 两阶段提交(2PC) | 分布式事务一致性 | prepare阶段(投票)+ commit阶段(执行) |
| Checkpoint | 缩短恢复时间 | 定期将内存脏页刷盘,记录检查点位置 |
〔2024·浙大·真题〕简述InnoDB中MVCC的实现机制,并说明READ COMMITTED与REPEATABLE READ下快照读的区别。
MVCC实现:
- 每行数据含两个隐藏列:DB_TRX_ID(最近修改事务ID)、DB_ROLL_PTR(回滚指针);
- undo log存历史版本链;
- 读操作根据当前事务ID与行版本ID比较决定可见性。
隔离级别差异:
- READ COMMITTED:每次读都生成新快照(读当前已提交版本),可能幻读;
- REPEATABLE READ:事务内首次读生成快照,后续读复用该快照,避免幻读(间隙锁补充)。
数据库应用与行业案例分析|理论联系实际
案例分析题要求考生将所学知识迁移至真实场景,考查系统设计能力与工程思维。以下结合电商、金融、社交三大高频领域,提供结构化分析模板。
? 行业数据库设计要点速览
- 电商系统:订单表拆分(订单头/订单行)、库存扣减(预占+异步扣减)、秒杀(Redis预减库存+异步写DB);
- 金融系统:强一致性(READ COMMITTED以上隔离)、双写/事务消息保障数据一致、审计日志表(INSERT触发器);
- 社交系统:关注关系(邻接表/路径枚举)、消息推送(拉模式/推模式)、热数据缓存(Redis Set/FastJSON序列化)。
〈2023·北大·面试题〉设计一个校园二手交易平台的数据库,要求支持商品搜索、交易撮合、评价系统、防刷单。
核心设计:
- 用户表:user(id, name, phone, score, register_time),score用于防刷单(新用户score低);
- 商品表:item(id, title, desc, price, status, user_id, category_id, created_at);
- 评价表:review(id, item_id, user_id, rating, content, created_at),限制每个用户对同一商品限评1次;
- 防刷单策略:IP/设备指纹+行为分析(如1分钟内下单>3次则限制);
- 搜索优化:商品标题建全文索引,或接入Elasticsearch。
加分点:引入订单状态机(待付款→已付款→已发货→已完成→已评价),用枚举+CHECK约束。
数据库技术发展趋势|前瞻视野与未来考纲
近年考研命题趋势显示,云原生数据库、HTAP、向量数据库、AI for DB等新兴方向正逐步纳入考查范围。理解趋势有助于在面试中展现技术敏感度。
? 五大前沿方向
- 云数据库普及:AWS Aurora、阿里云PolarDB(兼容MySQL/PostgreSQL,性能提升3倍);
- HTAP混合事务/分析处理:TiDB、OceanBase支持OLTP+OLAP一体,避免ETL延迟;
- 向量数据库兴起:用于AI/LLM场景(如Milvus、Chroma),支持近似最近邻(ANN)搜索;
- AI驱动优化:AutoML for DB(自动索引推荐、SQL改写优化);
- 隐私计算融合:联邦学习+数据库(如蚂蚁链DB),实现“数据可用不可见”。
〔2024·面试热点题〕什么是HTAP?它与传统OLTP/OLAP分离架构相比有何优势与挑战?
HTAP定义: Hybrid Transactional/Analytical Processing,即混合事务/分析处理,允许同一份数据同时支持OLTP(高并发事务)与OLAP(复杂分析)查询。
优势:
- 数据实时性:无需ETL延迟,T+1报表变为T+0;
- 架构简化:减少数据复制环节,降低运维成本;
- 成本优化:避免双份存储(如MySQL+Hive)。
挑战:
- 资源竞争:OLAP大查询影响OLTP响应;
- 致性保障:需强隔离(如TiDB使用MVCC+PD调度);
- 技术门槛高:需分布式存储、计算引擎深度整合。
高频问答|10大高频问题精解
范式与反范式如何取舍?
- 范式化:减少冗余,避免更新异常,适合OLTP(如订单系统);
- 反范式:冗余字段提升查询性能,适合OLAP(如数据仓库),但需业务层保障一致性;
- 平衡策略:核心实体范式化,高频JOIN字段冗余(如订单表含用户名、商品名)。
InnoDB与MyISAM核心区别?
- InnoDB:支持事务、行锁、外键、MVCC;聚簇索引(主键即数据);适合高并发OLTP;
- MyISAM:不支持事务、表锁;非聚簇索引(索引与数据分离);适合读多写少的OLAP;
- 默认选择:除非明确需要全文索引(MyISAM更快),否则统一用InnoDB。
如何判断是否需要分库分表?
- 单表>500万行:查询性能明显下降;
- 单库QPS>5000:连接池耗尽;
- 业务维度:用户维度(按user_id)、订单维度(按订单时间);
- 方案选择:ShardingSphere、Vitess、TiDB(自动分片)。
事务隔离级别对比?
| 级别 | 脏读 | 不可重复读 | 幻读 | 典型应用 |
|---|---|---|---|---|
| READ UNCOMMITTED | ✓ | ✓ | ✓ | 极少使用 |
| READ COMMITTED | ✗ | ✓ | ✓ | Oracle默认 |
| REPEATABLE READ | ✗ | ✗ | ✓(间隙锁解决) | MySQL默认 |
| SERIALIZABLE | ✗ | ✗ | ✗ | 金融核心系统 |
主键选择:UUID vs 自增ID?
- 自增ID:顺序写、索引紧凑、性能高;但分布式下需雪花算法等;
- UUID:全局唯一、无中心;但随机写导致页分裂、索引膨胀;
- 推荐:单机用自增;分布式用Snowflake(时间戳+机器ID+序列号)。
索引失效的常见场景?
- WHERE中对索引列使用函数(YEAR(create_time));
- 隐式类型转换(CHAR与INT比较);
- OR条件中非索引列;
- LIKE以%开头(%keyword);
- 索引列参与计算(price1.1 > 100)。
如何设计高并发抢红包系统?
- 预减库存:Redis预减库存,失败直接返回;
- 令牌桶限流:令牌不足则排队;
- 异步写DB:消息队列(Kafka)解耦;
- 防重放:唯一ID(用户ID+红包ID+时间戳)。
数据库慢查询定位流程?
- 开启slow_query_log;
- 分析slow log找出TOP SQL;
- EXPLAIN分析执行计划;
- 检查索引、锁等待、资源争用;
- 优化SQL或调整索引。
Redis与数据库如何协同?
- 缓存模式:Cache-Aside(主);
- 一致性保障:删缓存失败时延迟双删;
- 热点数据:Redis集群+分片;
- 持久化:RDB(快照)+ AOF(日志)。
分布式事务解决方案对比?
| 方案 | 一致性 | 性能 | 适用场景 |
|---|---|---|---|
| 2PC | 强 | 低 | 金融核心 |
| 3PC | 强 | 中 | 网络稳定环境 |
| TCC | 最终 | 高 | 业务可补偿(如订单) |
| Saga | 最终 | 高 | 长事务(电商下单) |
| 消息队列 | 最终 | 高 | 异步解耦场景 |