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