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:

  MySQL的MVCC详细理解(2022版)

  MySQL高级-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。

posted @ 2023-03-27 16:02  Katsu  阅读(111)  评论(0编辑  收藏  举报