SQL 面试最常问的 30 个核心知识点¶
下面整理了一份 SQL 面试最常问的 30 个核心知识点(偏后端 / 数据库工程师 / 大厂面试)。我按 6 大模块整理,这样复习效率最高。🚀
一、SQL 基础(5题)¶
1. 什么是 SQL?¶
SQL 是 结构化查询语言,用于操作关系型数据库,例如:
- MySQL
- PostgreSQL
- Oracle Database
- Microsoft SQL Server
SQL 主要包括:
| 类型 | 作用 |
|---|---|
| DDL | 定义数据库结构 |
| DML | 操作数据 |
| DCL | 权限控制 |
| TCL | 事务控制 |
2. DELETE、TRUNCATE、DROP 区别¶
| 命令 | 类型 | 作用 |
|---|---|---|
| DELETE | DML | 删除表数据 |
| TRUNCATE | DDL | 清空表 |
| DROP | DDL | 删除表结构 |
关键区别:
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| rollback | ✅ | ❌ |
| where | ✅ | ❌ |
| 速度 | 慢 | 快 |
3. WHERE 和 HAVING 的区别¶
| WHERE | HAVING | |
|---|---|---|
| 执行阶段 | 分组前 | 分组后 |
| 是否支持聚合 | ❌ | ✅ |
例子:
4. INNER JOIN vs LEFT JOIN¶
INNER JOIN
只返回 两表都有的数据
LEFT JOIN
返回:
5. GROUP BY 的执行流程¶
SQL 执行顺序:
面试经常问 ⚠️
二、索引(6题)¶
6. 什么是索引?¶
索引类似:
作用:
7. 索引的底层结构¶
大部分数据库使用:
B+Tree
例如:
- MySQL InnoDB
- PostgreSQL
原因:
- 查询稳定
- 支持范围查询
- 磁盘IO少
8. B+Tree vs B-Tree¶
| 特点 | B-Tree | B+Tree |
|---|---|---|
| 数据存储 | 所有节点 | 叶子节点 |
| 范围查询 | 一般 | 非常好 |
| 数据库使用 | 少 | 多 |
9. 什么是覆盖索引¶
如果查询字段:
数据库就 不用回表。
例:
如果索引:
就是 覆盖索引。
10. 什么是最左前缀原则¶
联合索引:
能用索引:
不能用:
11. 索引失效情况¶
常见:
1️⃣ 使用函数
2️⃣ 使用 % 前缀
3️⃣ 类型不匹配
4️⃣ OR 条件
三、事务(5题)¶
12. 什么是事务¶
事务是:
13. ACID 特性¶
事务四大特性:
| 特性 | 含义 |
|---|---|
| Atomicity | 原子性 |
| Consistency | 一致性 |
| Isolation | 隔离性 |
| Durability | 持久性 |
14. SQL 四个隔离级别¶
| 隔离级别 | 问题 |
|---|---|
| READ UNCOMMITTED | 脏读 |
| READ COMMITTED | 不可重复读 |
| REPEATABLE READ | 幻读 |
| SERIALIZABLE | 无 |
默认:
- MySQL → REPEATABLE READ
15. 什么是 MVCC¶
MVCC:
作用:
常见数据库:
- MySQL
- PostgreSQL
16. 什么是死锁¶
两个事务互相等待锁。
例:
数据库会 自动检测并回滚一个事务。
四、锁机制(4题)¶
17. 行锁 vs 表锁¶
| 类型 | 特点 |
|---|---|
| 行锁 | 并发高 |
| 表锁 | 并发低 |
18. 共享锁 vs 排他锁¶
| 锁 | 作用 |
|---|---|
| 共享锁(S) | 可以读 |
| 排他锁(X) | 可以读写 |
19. 什么是间隙锁(Gap Lock)¶
用于防止:
出现于:
- MySQL InnoDB
20. Next-Key Lock¶
Next-Key Lock =
作用:
五、SQL 优化(5题)¶
21. SQL 优化方法¶
常见:
1️⃣ 建立索引
2️⃣ 避免 SELECT *
3️⃣ 避免子查询
4️⃣ 使用分页
5️⃣ 减少 JOIN
22. EXPLAIN 是什么¶
用于查看:
例如:
可以看到:
- 是否走索引
- 扫描行数
23. 慢查询怎么排查¶
常用方法:
1️⃣ 开启慢查询日志
2️⃣ 用 EXPLAIN
3️⃣ 看索引
4️⃣ 看扫描行数
24. 什么是回表查询¶
查询流程:
会导致:
25. 什么是索引下推¶
优化:
在 索引层过滤数据。
数据库:
- MySQL
六、数据库设计(5题)¶
26. 什么是三范式¶
数据库设计原则:
| 范式 | 作用 |
|---|---|
| 第一范式 | 字段不可分 |
| 第二范式 | 消除部分依赖 |
| 第三范式 | 消除传递依赖 |
27. 什么是反范式¶
为了 性能优化:
例如:
28. 什么是分库分表¶
当数据量太大:
解决方案:
常见方案:
29. 什么是读写分离¶
架构:
提高性能。
30. 什么是主键设计¶
推荐:
避免:
原因: