我有一张拥有4000万条记录的表。
哪种方法更好(更快)?直接在该表中创建一个列,还是创建另一个带有标识列的表,并从第一个表中插入数据?
如果我在拥有4000万条记录的表中创建一个标识列,有可能估计需要多长时间来创建它吗?
我有一张拥有4000万条记录的表。
哪种方法更好(更快)?直接在该表中创建一个列,还是创建另一个带有标识列的表,并从第一个表中插入数据?
如果我在拥有4000万条记录的表中创建一个标识列,有可能估计需要多长时间来创建它吗?
我猜测它被阻止了 - 你是使用GUI还是查询窗口(你知道它正在运行的SPID吗?)
试试这些 - 如果它们给出结果并且你不确定该怎么做,请告诉我们:
USE master
SELECT * FROM sysprocesses WHERE blocked <> 0
SELECT * FROM sysprocesses WHERE status = 'runnable' AND spid <> @@SPID
这不是你只需要做一次的事情吗,因此花费多长时间并不是真正的问题?(假设它不需要花费数天时间...)
你能否创建一个测试数据库副本,并在其中创建该列,以查看需要多长时间吗?
我认为很多事情取决于硬件和你所使用的数据库管理系统。在我的环境中,创建一个新表并将旧数据复制到其中需要大约3到4个小时。根据其他经验,我预计添加一个标识列需要大约同样的时间。我使用的是Oracle,在SAN上有多个服务器,因此速度比单个服务器环境要快。你可能只需要坐下来等待。
ALTER TABLE [...] ADD ...
,那么速度非常快,实际上它早就完成了。如果您使用Management Studio表设计器,则会将表复制到新表中,删除旧表,然后将新表重命名为旧表。这需要一些时间,特别是如果您没有预先增加数据库和日志以容纳所需的额外空间。因为这是一个单一的事务,如果现在停止它,回滚需要大约另外16个小时。