【问题标题】:MySQL Create Table Like with Engine overrideMySQL Create Table Like with Engine override
【发布时间】:2012-01-09 12:46:23
【问题描述】:

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

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

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

创建表 .... 喜欢 .... INSERT INTO .... SELECT * FROM ....

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

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

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

【问题讨论】:

  • 81,000 个表 - 你确定你不是指元组吗?
  • 不,表格。这是一个 Wordpress MU 网站。超过 8000 个博客,每个博客都需要至少 3 个表……我什至无法连接普通的管理工具,因为它们都试图获取架构并超时 ;-)

标签: mysql wordpress innodb myisam multiple-databases


【解决方案1】:

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

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original`

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

CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original` WHERE 0

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

CREATE TEMPORARY TABLE `another_table` ) ENGINE=MEMORY SELECT * FROM `original`

...也许,您想添加TEMPORARY word,然后DB会在您关闭连接时自动删除该表

CREATE TABLE `another_table` ( INDEX(`id_column`) ) ENGINE=MEMORY SELECT * FROM `original`

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

【讨论】:

    【解决方案2】:

    是的,我已经这样做了(覆盖表格类型)。工作正常。

    对于像这样的大传输,我通常会进行某种形式的数据库转储, 一个脚本来处理数据(例如更改引擎类型),然后恢复到新数据库。基于文本的数据库转储大多使用COPY,比INSERT INTO快。

    您也可以发出ALTER TABLE {} ENGINE=INNODB;。虽然这意味着一个新的开始也有很多事情要做。

    81,000 张桌子。哇。

    【讨论】:

      【解决方案3】:

      另一个问题也间接回答了这个问题,当我尝试将表克隆到 MEMORY 引擎中时,这对我有所帮助: how-to-copy-mysql-table-structure-to-table-in-memory

      CREATE TABLE % ENGINE=InnoDB SELECT * FROM %
      

      希望这对我有所帮助!

      【讨论】:

        【解决方案4】:

        或者只是:

         CREATE TABLE `another_table` ENGINE=MEMORY SELECT * FROM `original` LIMIT 0
        

        【讨论】:

          猜你喜欢
          • 2013-06-29
          • 2018-10-05
          • 1970-01-01
          • 2017-12-13
          • 2022-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          相关资源
          最近更新 更多