【发布时间】:2013-12-01 12:36:19
【问题描述】:
我需要在一个有 2 列的表中插入大约 6400000 行
CREATE TABLE [DBName].[DBO].[BigList]
(
[All_ID] [int] identity(1,1) NOT NULL,
[Is_It_Occupied] [int] default(0) not null
)
我今天使用下面的代码,耗时很长,大概100分钟左右。
SET @NumberOfRecordsToInsert = 6400000;
WHILE (@NumberOfRecordsToInsert > 0)
BEGIN
INSERT [DBName].[DBO].[BigList] DEFAULT VALUES;
SET @NumberOfRecordsToInsert = @NumberOfRecordsToInsert - 1
END
有没有人有更好的方法来做到这一点?
【问题讨论】:
-
这张表有索引吗?
-
您考虑过将 Is_It_Occupied 声明为 BIT 吗?
-
你的数据库的 FILL FACTOR 怎么样?
-
数据库是否足够大以容纳表而不会在插入期间自动增长?在开始插入过程之前,您可以通过预先分配足够的空间来保存整个表的数据(和日志)来提高性能。如果您在插入发生时监视服务器(使用 perfmon 等),您可以观察“日志增长”和“数据库增长”事件等,以查看它们是否经常发生(并对性能产生不利影响)。
标签: sql-server sql-server-2008 insert identity-column