Mysql根据包含索引的另一个表创建表

时间:2011-01-26 01:09:53

标签: sql mysql database performance

我需要根据MYsql中的另一个表创建一个表,包括约束和索引。

我有以下情况:

表A-可能存在数百万行。 我想创建表B与表A完全相同(包括约束和索引)。 处理来自A和其他来源的数据并插入B. 在处理删除表A的末尾(与表A关联的丢弃索引)和将表B重命名为包括索引的A。

最好的方法是什么?表现是我​​真正关心的问题。

由于

1 个答案:

答案 0 :(得分:1)

在这种情况下,我们假设您知道表格的结构。换句话说,您不是在问“如何找出所有这些列,索引和约束是什么”。

其次,我们倾向于假设表A中的所有数据都是有效的,因此在从A复制到B时不需要强制执行约束。

您的“其他来源”是通配符。我假设你不知道这个其他来源是否包含有效数据,并建议:

1)创建B w / o indeces或约束

2)从“其他来源”复制/批量插入到B

3)通过发出SELECTS来查找无效行来执行约束。如果您知道数据有效,请跳过此步骤。一旦可以继续:

4)以“块”将A复制到B.这里的问题是所有X百万行的直接SELECT ... INTO ...将永远占用(因为在单个隐含事务中执行它所需的资源爆炸),但是逐行也将永远(因为它一次只做一行)。因此,您一次处理1000或10000行的块。

5)复制完所有数据后,添加indeces

6)添加约束

7)放弃A

8)重命名B