mysql执行计划explain和常见面试题
explain:https://www.cnblogs.com/developer_chan/p/9211487.html
mysql常见面试题:https://blog.csdn.net/hahazz233/article/details/125372412
分区:https://www.jianshu.com/p/3e90ce61e915
mvcc:
重点梳理:
- 当Extra含有Using index,说明查询语句中使用了索引覆盖
- 当Extra含有Using index condition,说明使用了索引下推(icp)
- 索引下推:https://www.cnblogs.com/year12/p/15000879.html (把索引过滤条件下推到引擎,来减少 MySQL 存储引擎访问基表的次数(回表)以及 MySQL 服务层访问存储引擎的次数)
- type的好坏:system:表中只有一行数据,特例,一般是系统表
>
const:一次索引就能找到结果;一般是使用主键或唯一索引,查找一行
>
eq_ref:唯一索引扫描,每个表只匹配一行;只用主键或唯一索引,连表查询,查找一行
>
ref:使用非主键非唯一索引,等值查询,返回匹配多行
>
range:使用索引范围查询:如 >,< ,between,in
>
index:全索引扫描;(一般是有主键或唯一索引,但查询条件中未使用)
>
all:全表扫描(查询条件列上未建索引)
要求:至少是range,最好达到ref
- 逻辑日志和物理日志:https://www.jianshu.com/p/646961b93c7e
-
RC,RR级别下的InnoDB快照读有什么不同?(为什么RR级别能解决不可重复读)
正式因为 Read View 的生成时间不同。在 RR 级别下的某个事务对某条记录的第一次快照读会创建一个快照以及 Read View,记录当前系统中活跃的其它事务,此后在调用快照读的时候,还是用的同一个 Read View,所以只要当前事务在其它事务提交更新之前使用过快照读,那么之后的快照读使用的都是同一个 Read View,所以对之后的修改不可见。
即 RR 级别下,快照读生成 Read View 时,Read View 会记录所有当前其它所有活跃事务的快照,这些食物的修改对于当前事务都是不可见的,而早于 Read View 创建的事务所作的修改均可见。
在 RC 级别下,事务中,每次快照都都会生成一个新的 Read View 和最新快照,这就是我们在 RC级别下的事务中可以看到别的事务提交更新的原因。
反正总而言之就是 RC 隔离级别 下,每个快照读都会生成新的 Read View 以及快照,而在 RR隔离级 别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。