8. 引擎是干什么的
Last updated
Was this helpful?
Last updated
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是没有的