MySQL 创建表类似于引擎覆盖

Ste*_*row 3 mysql wordpress myisam innodb multiple-databases

我正在使用 wpmudev.org 的插件将一个包含一个数据库和 81,000 多个表的 WordPress 站点分解为一个多数据库。主要动机是性能,我检查了表本身,它们是 MyISAM 类型。

我在想,在将表移动到新数据库时,我还可以将表类型更改为 InnoDB,这应该会提高站点性能。

将表从现有数据库迁移到新数据库的脚本使用以下语法:

创建表 .... LIKE .... 插入 .... SELECT * FROM ....

如果我可以在 CREATE TABLE 命令中覆盖引擎,我无法找到信息,例如:

创建表 .... LIKE .... ENGINE=InnoDB

另外我想知道“INSERT INTO .... SELECT * FROM ....”是否是插入数据的最有效方法...这是一个 php 脚本,所以我不介意添加一些代码来改进性能 - 在早期的试验中需要 3 天才能在 4 核 4GB RAM 上运行!

Dav*_*795 5

您无法使用create table like...语法指定 ENGINE 参数,但这里有一些替代方法:

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original`
Run Code Online (Sandbox Code Playgroud)

...将复制表结构和数据,没有键和触发器

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original` WHERE 0
Run Code Online (Sandbox Code Playgroud)

...将只复制结构,但不复制数据(因为WHERE 0会过滤掉所有数据)

CREATE TEMPORARY TABLE `another_table` ) ENGINE=MEMORY SELECT * FROM `original`
Run Code Online (Sandbox Code Playgroud)

...也许,您想添加TEMPORARY单词,然后数据库会在您关闭连接时自动删除该表

CREATE TABLE `another_table` ( INDEX(`id_column`) ) ENGINE=MEMORY SELECT * FROM `original`
Run Code Online (Sandbox Code Playgroud)

...这是一个关于如何在新表中重新创建键的示例(定义键的语法与简单的 CREATE TABLE 语法相同)