如果MySQL有自己的模块来完成这些任务,为什么InnoDB有自己的解析器和服务器连接模块?

时间:2018-03-06 02:55:01

标签: mysql innodb

据我所知,MySQL从SQL查询创建执行计划,然后使用innodb(或任何其他存储引擎)来执行计划。如果是这种情况,为什么innodb存储引擎有自己的解析器,服务器主程序和用户会话模块?看起来InnoDB可以作为一个功能齐全的DBMS独立运行。

1 个答案:

答案 0 :(得分:3)

InnoDB于1995年开始作为一家独立公司。创始人希望创建一个独立的RDBMS服务器。

直到2000年,InnoDB才开始与MySQL密切合作,到2001年3月,他们宣布了InnoDB Table Handler,它允许MySQL将工作委托给存储引擎。

但InnoDB希望支持MySQL不支持的一些功能:

  • 外键约束
  • 专有表格选项
  • 交易

MySQL希望允许InnoDB和其他存储引擎实现自己的功能。因此,他们允许存储引擎层执行自己的SQL解析。有许多功能(如CHECK约束)由MySQL存储独立层验证语法,而不实现语义。它由存储引擎来执行额外的解析并实现这些功能。

还有一些情况是InnoDB存储引擎想要实现在更高级别没有SQL支持的功能。

例如,InnoDB监视器,用于将定期故障排除数据输出到服务器的错误日志,可能不是通过SET ENGINE INNODB MONITOR=ON这样的合理语法启用,而是通过创建一个带有特别名称:

CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;

您在此表中创建哪个架构,以及放入哪些列并不重要。它不需要任何数据行。名称本身对InnoDB来说是特殊的,它是开始将监视器数据记录到日志的信号。这样他们就不必实现新的配置选项或SQL语法了!

在MySQL的更高版本中,您可以使用SET GLOBAL innodb_status_output=ON以较少的hacky方式启用监视器。