xiaohanliang
Database
Database
  • review
  • MySQL
    • 0. 索引就是树吗
    • 1. 索引是怎么发挥作用的
    • 2. 聊聊怎么估时间
    • 3. 主键玄学
    • 4. 事务的执行过程@ACD
    • 5. MVCC就是用undolog回退
    • 6. 事务如何彼此隔离@I
    • 7. 如何人为的制造死锁
    • 8. 引擎是干什么的
    • 9. 主从复制怎么做到的
    • 10. 寻找同步起始点GTID
    • 11. 预解析Statement
  • Redis
    • 0. Hash@数据结构
    • 1. ZSet@数据结构
    • 2. 场景与玩法@数据结构
    • 3. 可能的风险点
    • 4. Redis的落盘
    • 5. 关于效率的讨论
    • 6. 主从模式@集群化
    • 7. [WIP]Proxy实现@集群化
    • 8. 标准玩法@集群化
  • KV/Distributed
    • 0. 面临的问题
    • 1.Raft@原理
    • 2. LSM@原理
    • 3. [WIP]分布式事务@原理
Powered by GitBook
On this page

Was this helpful?

  1. MySQL

8. 引擎是干什么的

Previous7. 如何人为的制造死锁Next9. 主从复制怎么做到的

Last updated 4 years ago

Was this helpful?

MySQL默认用的是InnoDB引擎, 看看上面的图, 真正MySQL本体(Server层)负责的只有查询缓存, 语句解析与优化, 换句话说, MySQL-Server只是负责提炼语句, 然后把语句送进引擎层, 具体怎么一种执行策略就全归引擎层负责了, 因此:

  • Server层负责:

    • 语法解析: 常见的SyntaxError就是在Server层的解析器抛出来的

    • 连接管理: 比如一个连接的有效时长是多久多久

    • 查询缓存命中: 不走存储引擎直接返回

  • 存储引擎层负责: 所有的执行策略, feature 等等都是引擎负责的, 可以说从一个string开始到最后的结果集, 所有的东西都是存储引擎负责

    • 怎样避免死锁: 死锁检测功能

    • 怎样让你的语句查询的更快: 索引的设计与实现, B+树

    • 怎样在并发的条件下避免脏读脏写: 各种锁MVCC的实现

    • 怎样做到即使Crash了也能让事务稳健: Crash-Safe的binlog/redo-log, 其中redo-log是InnoDB特有的实现方案, ISAM是没有的