【发布时间】:2015-09-07 11:49:23
【问题描述】:
目前我们正在使用 Sybase ALTER 命令将生产数据库表从 INT 转换为 BIGINT。 其中一张表有 15 亿行,我们无法在一个周末的时间范围内转换(运行了近 43 小时,然后我们将其杀死并恢复了数据库转储)。
将此表快速转换为 BIGINT 的任何其他建议。此表上有聚集索引、唯一索引和非聚集索引。
我正在考虑以下解决方案:您能建议最好的方法吗?
- 创建一个新列并使用旧值更新它,然后删除旧列,然后重命名新列。
- BCP 输出数据,截断表,使用新数据类型更改表结构,然后 BCP 输入数据
- 将表分区为小表,然后更改表并再次合并。
【问题讨论】:
-
我的选择是:BCP 输出数据,截断表,使用新数据类型更改表结构,然后在数据中进行 BCP,加载应该比更新 15 亿行快得多,你需要做的就是改变表格的结构。
-
有人可以确认 ASE 中的加载速度比更新快吗,我在考虑 IQ,现在我看到他正在使用 ASE,ASE 中的 DML 与 IQ 相比相当快,所以也许我错了?
-
谢谢,但我在那个表上有索引(1 个集群和 3 个非集群),所以如果我选择 BCP,我们需要重建索引 - 这又需要大量时间。