目录
2. 如何理解InnoDB的Next-Key Lock机制?
7.3 为什么InnoDB在可重复读隔离级别下仍然可能产生幻读?
10.3 针对“使用覆盖索引来实现ORDER BY和GROUP BY,或者将排序操作放到应用程序层面”具体应该怎么做呢?
1. 什么是MySQL的MVCC机制?
2. 如何理解InnoDB的Next-Key Lock机制?
3. 快照读和当前读的区别?
4. 如何在SQL语句中触发当前读?
5. MySQL默认的隔离级别是什么?
6. 如何避免在使用当前读时可能出现的死锁问题?
7.1 事务的四种隔离级别是什么?
7.2 不可重复读和幻读之间的区别是什么?
7.3 为什么InnoDB在可重复读隔离级别下仍然可能产生幻读?
7.4 解决幻读的方法★★★
8. MySQL的日志★★★★★
MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)、事务日志 redo log(重做日志)、undo log(回滚日志)。
8.1 为什么需要使用redo log?它是何时写的?
8.2 redo log的刷盘策略
8.3 redo log的两阶段提交
8.4 binlog日志的记录格式、写入机制
9. EXPLAIN
分析执行计划★★★★★
图灵第4期MySQL调优专题学习笔记_图灵学院索引优化资料下载-CSDN博客
10.1 MySQL索引失效的情形有哪些?★★★
10.2 如何避免索引失效的情况?★★★
10.3 针对“使用覆盖索引来实现ORDER BY和GROUP BY,或者将排序操作放到应用程序层面”具体应该怎么做呢?
11. MySQL高性能优化规范建议总结
一、数据库命名规范:
二、数据库基本设计规范
三、字段设计规范
四、索引设计规范
五、SQL 开发规范
六、必须阅读
12. MySQL索引详解★★★★★
一、最左前缀匹配原则:
最左匹配原则会一直向右匹配,直到遇到范围查询(如 >、<)为止。对于 >=、<=、BETWEEN 以及前缀匹配 LIKE 的范围查询,不会停止匹配(相关阅读:联合索引的最左匹配原则全网都在说的一个错误结论)。
二、索引下推
- 索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 版本中提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分
WHERE
字句的判断条件,直接过滤掉不满足条件的记录,从而减少回表次数,提高查询效率。 - MySQL 可以简单分为 Server 层和存储引擎层这两层。Server 层处理查询解析、分析、优化、缓存以及与客户端的交互等操作,而存储引擎层负责数据的存储和读取,MySQL 支持 InnoDB、MyISAM、Memory 等多种存储引擎。
- 索引下推的下推其实就是指将部分上层(Server 层)负责的事情,交给了下层(存储引擎层)去处理。
三、MySQL的索引结构?★★★★★
索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树,Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。
为什么MySQL的索引结构不使用Hash索引、二叉查找树(BST)、红黑树?
- Hash索引:不支持顺序和范围查询。
- 二叉查找树(BST):二叉查找树的性能非常依赖于它的平衡程度。
- 红黑树:平衡性相对较弱,可能会导致树的高度较高,这可能会导致一些数据需要进行多次磁盘 IO 操作才能查询到。
四、索引分类
按照数据结构维度划分:BTree 索引、哈希索引、RTree 索引、全文索引。
按照底层存储方式角度划分:聚簇索引、非聚簇索引。
按照应用维度划分:
主键索引 VS 二级索引
覆盖索引和联合索引:略。
聚簇索引与非聚簇索引:
13. MySQL查询缓存详解
有经验的 DBA 都建议生产环境中把 MySQL 自带的 Query Cache(查询缓存)给关掉。而且,从 MySQL 5.7.20 开始,就已经默认弃用查询缓存了。在 MySQL 8.0 及之后,更是直接删除了查询缓存的功能。