8. 引擎是干什么的

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

  • Server层负责:

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

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

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

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

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

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

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

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

Last updated

Was this helpful?