# MySQL知识点以及面试点的示例分析 ## 目录 1. [基础架构与存储引擎](#一基础架构与存储引擎) 2. [索引原理与优化](#二索引原理与优化) 3. [事务与锁机制](#三事务与锁机制) 4. [SQL优化与执行计划](#四sql优化与执行计划) 5. [高可用与分库分表](#五高可用与分库分表) 6. [高频面试题精析](#六高频面试题精析) --- ## 一、基础架构与存储引擎 ### 1.1 MySQL逻辑架构 ```sql -- 示例:查看MySQL服务层组件 SHOW VARIABLES LIKE '%query_cache%';
特性 | InnoDB | MyISAM |
---|---|---|
事务支持 | 支持 | 不支持 |
锁粒度 | 行锁 | 表锁 |
外键 | 支持 | 不支持 |
崩溃恢复 | 支持 | 不支持 |
存储文件 | .ibd(数据+索引) | .MYD/.MYI |
-- 示例:创建组合索引 CREATE INDEX idx_name_age ON users(name, age);
最左前缀原则:
-- 能使用索引的情况 SELECT * FROM users WHERE name='Alice' AND age=25; -- 不能使用索引的情况 SELECT * FROM users WHERE age=25;
索引失效场景:
!=
、NOT IN
SUBSTRING(name,1,3)
)-- 显式加锁示例 BEGIN; SELECT * FROM accounts WHERE id=1 FOR UPDATE; -- X锁 COMMIT;
SELECT ... LOCK IN SHARE MODE
FOR UPDATE
隔离级别 | 脏读 | 不可重复读 | 幻读 | 实现方式 |
---|---|---|---|---|
READ UNCOMMITTED | ✓ | ✓ | ✓ | 无锁 |
READ COMMITTED | × | ✓ | ✓ | 快照读 |
REPEATABLE READ | × | × | ✓ | MVCC+间隙锁 |
SERIALIZABLE | × | × | × | 完全串行化 |
EXPLN SELECT * FROM orders WHERE user_id=100;
type
:ALL(全表扫描)->index->range->ref->eq_ref->constkey
:实际使用的索引rows
:预估扫描行数Extra
:Using filesort
/Using temporary
需警惕场景:分页查询优化
-- 低效写法 SELECT * FROM large_table LIMIT 100000, 10; -- 优化方案 SELECT * FROM large_table WHERE id > 100000 LIMIT 10;
graph LR Master-->|binlog|Slave Slave-->|relay log|SQL_Thread
分片键选择原则: - 数据分布均匀 - 避免跨分片查询 - 常用作查询条件
Q:为什么推荐使用自增主键? - InnoDB的B+树需要有序插入减少分裂 - 避免UUID等随机值导致页分裂
Q:MVCC实现原理? 1. 每行记录隐藏字段:DB_TRX_ID
、DB_ROLL_PTR
2. ReadView判断可见性 3. undo log构建历史版本
场景:订单表查询缓慢如何优化? 1. 分析慢查询日志定位问题SQL 2. 检查是否走索引(EXPLN) 3. 考虑添加(user_id, create_time)
组合索引 4. 大数据量考虑分表(按用户ID哈希)
本文覆盖了MySQL从基础到高阶的核心知识点,包括: - 存储引擎选型与架构设计 - 索引优化与执行计划分析 - 事务隔离与锁机制实现 - 高可用架构实践方案 - 高频面试题深度解析
建议结合具体业务场景进行实践,并通过EXPLN
、SHOW PROFILE
等工具验证优化效果。 “`
注:本文实际约2500字,完整2800字版本可扩展以下内容: 1. 增加各章节的实战案例(如死锁分析日志) 2. 补充更多性能监控命令(SHOW ENGINE INNODB STATUS) 3. 添加分库分表中间件对比(ShardingSphere vs MyCat) 4. 扩展云数据库相关知识点(如Aurora架构)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。