场景还原:
"还有三天就MySQL认证考试了,小张盯着电脑屏幕抓狂——那些嵌套查询像绕毛线团似的越看越乱,他想起前辈说过'真题就是最好的模拟战',可网上答案要么残缺不全,要么解释得像天书..." 别急!这份根据2025年8月最新考纲整理的真题攻略,专治各种考前焦虑。
真题再现:
-- 现有订单表orders(500万条数据),查询最近30天消费金额TOP100的用户 SELECT user_id, SUM(amount) FROM orders WHERE create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY user_id ORDER BY SUM(amount) DESC LIMIT 100;
灵魂拷问:如何优化这条SQL?请给出至少3种方案。
参考答案:
复合索引黄金组合:
ALTER TABLE orders ADD INDEX idx_user_time_amount (user_id, create_time, amount);
覆盖索引直接命中查询字段,避免回表
预计算狠招:
-- 建立定时任务凌晨计算TOP100 CREATE TABLE user_consumption_daily ( user_id INT PRIMARY KEY, total_amount DECIMAL(12,2), last_calc_date DATE );
冷热数据分离:
-- 将历史订单归档到orders_archive PARTITION BY RANGE (TO_DAYS(create_time)) (...);
考官隐藏考点:
真题场景:
当会话A执行
UPDATE account SET balance=balance-100 WHERE id=1
未提交时,会话B执行SELECT balance FROM account WHERE id=1
会看到什么结果?分别在READ UNCOMMITTED/REPEATABLE READ隔离级别下分析。
避坑指南:
| 隔离级别 | 会话B看到结果 | 原理剖析 |
|-------------------|-------------------|-------------------------|
| READ UNCOMMITTED | 减少后的余额 | 脏读风险,直接读内存未提交数据 |
| REPEATABLE READ | 原始余额 | MVCC机制创建快照读 |
实战技巧:
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
模拟测试 A. CREATE INDEX idx_name ON users(name)
B. START TRANSACTION
C. ALTER TABLE users ADD COLUMN age INT
D. SAVEPOINT p1
正确答案:A、C
深度解析:
题型 | 2025年新增考点 | 应试技巧 |
---|---|---|
主从复制 | GTID复制故障排查 | SHOW SLAVE STATUS\G 看Last_IO_Error |
窗口函数 | NTH_VALUE() OVER()用法 | 牢记执行顺序:FROM→WHERE→窗口函数→SELECT |
JSON操作 | JSON_TABLE转换JSON为临时表 | 配合COLUMNS关键字定义输出列 |
临考冲刺建议:
EXPLAIN
的输出格式背下来,考试至少出现5道执行计划分析题 考试当天记得带好证件和外套——考场空调总是冷得像数据库服务器的机房,祝各位像优化后的SQL查询一样,又快又准地通过考试!
本文由 昂妮娜 于2025-08-02发表在【云服务器提供商】,文中图片由(昂妮娜)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/512950.html
发表评论