支持Cloud-SQL-Storage Engine内存?

时间:2018-04-23 07:46:09

标签: google-cloud-sql

GoogleCloudSQL常见问题解答指出

  

For MySQL Second Generation instances, InnoDB is the only storage engine supported

我的实验表明engine=memory是可能的,至少对于临时表来说是这样。

CREATE TEMPORARY TABLE mt (c CHAR(20)) ENGINE=memory;
Query OK, 0 rows affected

SHOW CREATE TABLE mt;
+---------+----------------+
| Table   | Create Table   |
|---------+----------------|
| mt      | CREATE TEMPORARY TABLE `mt` (
  `c` char(20) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8                |
+---------+----------------+
1 row in set
Time: 0.022s

INSERT INTO mt (c) VALUES ('waaa' );
Query OK, 1 row affected
Time: 0.017s

SELECT * FROM mt;
+------+
| c    |
|------|
| waaa |
+------+
1 row in set
Time: 0.019s

这是可行但不支持吗?谷歌可以在不通知的情况下禁用此功能吗?这只是遗漏了FAQ,因为消息是应该使用innodb而不是myisam?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

尽管可以使用MEMORY表来创建表(仅限临时表),但Google Cloud不支持它,因为它不提供与InnoDB引擎相同的一致性,并且可能容易出错。

此外,在使用第二代MySQL的较新Cloud SQL实例中,使用除InnoDB之外的任何存储引擎都会导致错误,例如:

ERROR 3161 (HY000): Storage engine MEMORY is disabled (Table creation is disallowed)

截至目前,对于使用第二代MySQL的Cloud SQL实例,唯一受支持的存储引擎是InnoDB。如果您可以在实例上使用MEMORY引擎,则表示它是旧版本。由于不支持MEMORY引擎,Google可能会在您发表评论时禁用此功能,而不会发出通知。

我的建议是,虽然现在你可以在你的Cloud SQL实例中使用MEMORY引擎作为临时表,但请坚持使用InnoDB引擎,因为它是唯一受Google支持的引擎。提到MyISAM的相同消息也适用于其他存储引擎。