mysql使用

2021-03-07  本文已影响0人  laowangv2

一、 mysql执行顺序

  1. 执行流程
    1. 连接器
      处理连接
    2. 查询缓存
      查询语句完全一致才走到缓存,如果命中,返回前会鉴权
    3. 分析器
      1. 词法分析
      2. 语法分析
    4. 优化器
      生成执行计划(选索引、join表顺序等)
    5. 执行器
      先鉴权,然后调用存储引擎的接口获取数据
  2. sql执行顺序
    参考关于sql和MySQL的语句执行顺序(必看!!!),不一定都对

二、 事务

1. 四个基本特性

mysql如何实现ACID?

2. 隔离级别

3. mvcc

如何实现可重复读?

innoDB为行添加隐藏列

如何消除幻读?

通过当前读+next-key锁消除幻读。当前读可以认为是加锁操作,对应的是快照读,就是正常mvcc情况下不加锁的读

三. 锁

  1. 类型
    S锁和X锁,分别代表共享锁和排他锁
  2. 粒度
    表锁和行锁
  3. 意向锁
    加行锁的同时会先加上表级的意向锁,即IS或IX,这样后续如果要加表锁就可以很快知道有没有行处在锁定中
  4. record lock
    因为innodb不管怎样都会有一个索引,所以record lock都是加在索引上

Record locks always lock index records, even if a table is defined with no indexes. For such cases, InnoDB creates a hidden clustered index and uses this index for record locking. See Section 14.6.2.1, “Clustered and Secondary Indexes”.

  1. gap lock
  2. next-key lock
    record lock + record前的gap lock
  3. Insert Intention Locks
  4. AUTO-INC Locks

四. 索引

  1. b树和b+树
    b树的主要问题是每层既有数据又有下一层的指针,导致每层数据较b+树少,高度会更高一些。更重要的是,范围查找b树支持的不好,非常繁琐,可能需要做中序遍历。
    b+树针对b树的问题,非叶子节点不存数据,所以更矮胖,同时数据都在叶子节点查询性能稳定,在叶子节点上串起了一个链表结构,范围查找简便。
  2. 红黑树
    红黑树是二叉树体系下综合取舍的产物,单纯的二叉树可能退化成链表,查询性能大幅下降,而AVL的维护成本高,不利于写,红黑树是均衡取舍的结果。但二叉对外存结构来说树高度太高,不适合需要磁盘IO的场景,所以多用在内存结构中。

日志

  1. binlog
    逻辑日志,就是执行的sql,一般用来做主从同步和数据恢复。格式有STATEMENT、ROW和MIXED
  2. redo
    记录数据页的变化,事务提交后保证持久性
  3. undo
    记录前一个版本的值,用于回滚事务,以及实现MVCC

参考

MySQL是如何实现可重复读的?
Innodb中的事务隔离级别和锁的关系

上一篇 下一篇

猜你喜欢

热点阅读