创建标识列需要多长时间?

时间:2009-08-20 12:37:13

标签: sql-server identity

我有一张有4000万条记录的表。

什么是最好的(更快)?直接在该表中创建一个列,或者创建另一个带有标识列的表并从第一个插入数据?

如果我在表中创建了一个拥有4000万条记录的标识列,是否可以估计创建它需要多长时间?

6 个答案:

答案 0 :(得分:2)

这种取决于。创建一个标识列不会花那么长时间(好吧这是相对于表的大小),假设你将它附加到表的末尾。如果没有,服务器必须创建一个新表,其标识列位于所需位置,将所有行导出到新表,然后更改表名。我猜这是需要这么久的事情。

答案 1 :(得分:1)

我猜它被阻止了 - 你使用了GUI还是一个查询窗口(你知道它正在运行的SPID吗?)

尝试这些 - 让我们知道他们是否给出了结果而您不确定该怎么做:

USE master

SELECT * FROM sysprocesses WHERE blocked <> 0

SELECT * FROM sysprocesses WHERE status = 'runnable' AND spid <> @@SPID

答案 2 :(得分:0)

这不是你只需要做一次的事情,因此不需要花多长时间才能解决问题? (假设它不需要几天......)

答案 3 :(得分:0)

您是否可以创建数据库的测试副本并在其上创建列以查看需要多长时间?

答案 4 :(得分:0)

我认为很大程度上取决于硬件以及您所在的DBMS。在我的环境中,创建新表并将旧数据复制到其中大约需要3到4个小时。我希望添加一个标识列可以花费大约相同的时间,仅基于其他经验。我在Oracle上使用SAN上的多个服务器,因此比单个服务器环境中的运行速度更快。你可能只需坐下来等待。

答案 5 :(得分:0)

如果你在查询窗口中使用了ALTER TABLE [...] ADD ...,它的速度非常快,实际上很久以前它就已经完成了。如果您使用Management Studio表设计器,则会将表复制到新表中,删除旧表,然后将新表重命名为旧表。这需要一段时间,特别是如果您没有预先增长数据库和日志以适应所需的额外空间。因为是一个单一的事务,如果你现在停止它还需要大约16个小时才能回滚。