【数据库】SQL进阶15题,窗口函数/索引/事务一页速查

本文系统梳理SQL进阶核心考点,涵盖窗口函数(ROW_NUMBER/RANK/DENSE_RANK、PARTITION BY、累计计算)、索引原理与优化(B+树、覆盖索引、最左前缀、EXPLAIN解读)、事务ACID特性、四大隔离级别及典型问题(脏读、不可重复读、幻读)、死锁成因与锁类型(行锁、乐观锁、悲观锁)。内容聚焦面试高频难点,辅以代码示例与易错点提示。

【前言】基础题能答,进阶题才见真章。窗口函数、索引、事务是面试官最爱深挖的三块,也是决定 offer 的分水岭。这篇把板块2的15道进阶必问整理成可背速查,附代码示例与易错点。

一、窗口函数(高频)

1、ROW_NUMBER / RANK / DENSE_RANK 区别:ROW_NUMBER 不并列;RANK 并列但跳号;DENSE_RANK 并列不跳号。示例:SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) FROM emp;

2、PARTITION BY 分组内排名:SELECT dept, name, RANK() OVER (PARTITION BY dept ORDER BY salary DESC) FROM emp;

3、SUM 累加 / 移动平均:SELECT id, amount, SUM(amount) OVER (ORDER BY id) FROM orders;

二、子查询与集合操作

4、子查询:SELECT name FROM emp WHERE salary > (SELECT AVG(salary) FROM emp);

5、EXISTS / NOT EXISTS:比 IN 更高效,命中即停。

6、UNION(去重)vs UNION ALL(不去重,更快)。

7、CASE WHEN:SELECT name, CASE WHEN salary>=10000 THEN 高薪 ELSE 普通 END FROM emp;

三、索引与查询优化

8、索引原理:B+ 树,类似目录,查询从 O(n) 降到 O(log n);代价是占空间、写变慢。

9、覆盖索引 / 最左前缀:联合索引 (a,b,c) 中 a、a+b、a+b+c 能命中,b、c、b+c 不能。

10、EXPLAIN:重点看 type(ALL=全表扫描 > index > range > ref > eq_ref > const)与 rows(扫描行数)。

11、慢查询优化框架:EXPLAIN 看是否全表扫描 → 加索引 → 避免 SELECT * → 避免 WHERE 对列做函数 → 深分页用游标。

四、事务与锁

12、事务 ACID:原子性、一致性、隔离性、持久性。

13、隔离级别:读未提交(脏读)/ 读已提交(不可重复读)/ 可重复读(幻读,MySQL默认)/ 串行化。

14、死锁:两事务互持对方资源。解决:超时回滚、合理加锁顺序、缩小事务范围。

15、锁:行锁、表锁、乐观锁(版本号)、悲观锁(SELECT...FOR UPDATE)。

【结语】板块2是进阶核心,板块3(真实场景题:连续登录、留存率、行列转换等)后续更新,关注不迷路。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Warolitbos

如果有帮助,请我喝咖啡!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值