面试问题浓缩总结 面试问题浓缩总结
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • MySQL

    • 数据库基础
    • 引擎
      • 主要区别
      • InnoDB引擎的4大特性
      • InnoDB行级锁是基于什么样的机制实现
        • InnoDB行级锁的类型
    • 索引
    • 事务和锁
    • 视图,存储过程,函数,触发器
    • SQL语句及优化
    • 分布式和备份
    • 高频面试题
    • MySQL底层
  • Redis

  • MongoDB

  • 数据库
  • MySQL
小游
2021-03-20

引擎

常考的主要分为InnoDB,MyISAM

# 主要区别

img

image-20210308092228291

# InnoDB引擎的4大特性

  • 插入缓冲(insert buffer)
  • 二次写(double write)
  • 自适应哈希索引(ahi)
  • 预读(read ahead)

深入参考:InnoDB四大特性 - 知乎 (zhihu.com) (opens new window)

# InnoDB行级锁是基于什么样的机制实现

InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

特点

  1. 在不通过索引查询时,会使用表锁,而不是行锁
  2. 因为针对索引加的锁,不是针对记录加的锁,所以即使是访问不同行的记录,如果使用了相同的索引键,也是会出现锁冲突的。
  3. 当有多个索引时,不同的事务可以使用不同的索引锁定不同的行。另外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。
  4. 即便在条件中使用了索引字段,但具体是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁。

# InnoDB行级锁的类型

InnoDB的行级锁定同样分为两种类型:共享锁和排他锁,而在锁定机制的实现过程中为了让行级锁定和表级锁定共存,InnoDB也同样使用了 意向锁(表级锁定) 的概念,也就有了意向共享锁和意向排他锁这两种。

深入参考:了解Mysql的行级锁——《深究Mysql锁》 - SegmentFault 思否 (opens new window)

编辑 (opens new window)
上次更新: 2021/04/01, 17:14:55
数据库基础
索引

← 数据库基础 索引→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式