25.2.7.6 NDB 集群中不支持或缺失的功能
其他存储引擎支持的一些功能在NDB
表中不受支持。尝试在 NDB 集群中使用这些功能不会导致错误本身,但是可能会出现期望这些功能被支持或强制执行的应用程序中的错误。引用这些功能的语句,即使NDB
实际上忽略它们,也必须是语法正确和其他方式有效。
-
索引前缀. NDB 表不支持索引前缀。如果在语句中,如
CREATE TABLE
、ALTER TABLE
或CREATE INDEX
,使用前缀作为索引specification的一部分,那么NDB
不会创建该前缀。包含索引前缀的语句,用于创建或修改 NDB 表,仍然必须是语法正确的。例如,以下语句无论存储引擎如何总是会失败,并返回错误 1089 索引前缀键不正确;使用的键部分不是字符串,使用的长度超过键部分,或存储引擎不支持唯一前缀键:
CREATE TABLE t1 ( c1 INT NOT NULL, c2 VARCHAR(100), INDEX i1 (c2(500)) );
这是因为 SQL 语法规则的原因,即索引不能有大于自身的前缀。
-
保存点和回滚。 保存点和回滚到保存点在MyISAM中被忽略。
-
提交的持久性。 没有在磁盘上持久化的提交。提交将被复制,但是不能保证日志被flush到磁盘上。
-
复制。 语句级别的复制不受支持。使用
--binlog-format=ROW
(或--binlog-format=MIXED
)设置集群复制。见第25.7节,“NDB集群复制”,了解更多信息。使用全局事务标识符(GTIDs)进行的复制在NDB集群中不兼容,并且在NDB集群8.4中不受支持。在使用NDB存储引擎时,不要启用GTIDs,因为这可能会导致问题,包括NDB集群复制失败。
半同步复制在NDB集群中不受支持。
-
生成列。 NDB存储引擎不支持虚拟生成列的索引。
与其他存储引擎一样,您可以在存储生成的列上创建索引,但需要注意的是,
NDB
使用DataMemory
存储生成的列,以及IndexMemory
存储索引。请参阅NDB集群中的JSON列和间接索引,了解示例。NDB
集群将存储生成的列中的更改写入二进制日志,但不会记录虚拟列中的更改。这不应该影响NDB
集群复制或NDB
和其他MySQL存储引擎之间的复制。
请参阅第25.2.7.3节,“NDB集群中的事务处理限制”,了解更多关于NDB
集群的事务处理限制信息。