我需要基于MYsql中的另一个表(包括约束和索引)创建一个表。Mysql基于包含索引的另一个表创建表
我有以下情形:
表A-与数百万行的可能存在。 我想创建与表A完全相同的表B(包括约束和索引)。 处理来自A和某些其他来源的数据并插入到B中。 在处理结束时丢弃表A(与表A关联的丢弃索引)并将表B重命名为包括索引的A.
这样做的最好方法是什么?性能是我真正关心的。
谢谢
我需要基于MYsql中的另一个表(包括约束和索引)创建一个表。Mysql基于包含索引的另一个表创建表
我有以下情形:
表A-与数百万行的可能存在。 我想创建与表A完全相同的表B(包括约束和索引)。 处理来自A和某些其他来源的数据并插入到B中。 在处理结束时丢弃表A(与表A关联的丢弃索引)并将表B重命名为包括索引的A.
这样做的最好方法是什么?性能是我真正关心的。
谢谢
在这种情况下,我们假设您知道表的结构。换句话说,你不是问“我怎么知道所有这些列,索引和约束是什么”。
其次,我们倾向于认为,在表格中的所有数据是有效的,所以你并不需要强制限制,同时从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)重命名乙
`CREATE TABLE ... LIKE oldtable`可以在这里派上用场,尽管它会复制索引定义。 – 2011-01-26 02:41:26