2011-01-26 90 views
1

我需要基于MYsql中的另一个表(包括约束和索引)创建一个表。Mysql基于包含索引的另一个表创建表

我有以下情形:

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

这样做的最好方法是什么?性能是我真正关心的。

谢谢

回答

1

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

其次,我们倾向于认为,在表格中的所有数据是有效的,所以你并不需要强制限制,同时从A复制到B.

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

1)w创建B /Ø的indeces或约束

2)从“其他来源”复制/ BULK INSERT B

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

4)将A复制到B中的“区块”中。这里的问题是,对于所有X百万行的SELECT ... INTO ......都会永远占用(因为在单个隐含事务中需要大量资源),但是逐行也会永远持续(因为它一次只能做一行)。因此,您一次处理1000或10000行的块。

5)当所有的数据被复制,添加的indeces

6)添加的约束

7)降

8)重命名乙

+0

`CREATE TABLE ... LIKE oldtable`可以在这里派上用场,尽管它会复制索引定义。 – 2011-01-26 02:41:26

相关问题