sql*_*ild 30 sql sql-server sql-server-2005 copying
我有一个340万行的表.我想将这整个数据复制到另一个表中.
我正在使用以下查询执行此任务:
select *
into new_items
from productDB.dbo.items
Run Code Online (Sandbox Code Playgroud)
我需要知道完成这项任务的最佳方法.
Mat*_*tin 72
我有同样的问题,除了我有一个20亿行的表,所以如果我这样做,日志文件将会增长到最后,即使恢复模型设置为Bulk-Logging:
insert into newtable select * from oldtable
Run Code Online (Sandbox Code Playgroud)
所以我操作数据块.这样,如果传输中断,您只需重新启动它.此外,您不需要与表一样大的日志文件.你似乎也得到更少的tempdb I/O,不知道为什么.
set identity_insert newtable on
DECLARE @StartID bigint, @LastID bigint, @EndID bigint
select @StartID = isNull(max(id),0) + 1
from newtable
select @LastID = max(ID)
from oldtable
while @StartID < @LastID
begin
set @EndID = @StartID + 1000000
insert into newtable (FIELDS,GO,HERE)
select FIELDS,GO,HERE from oldtable (NOLOCK)
where id BETWEEN @StartID AND @EndId
set @StartID = @EndID + 1
end
set identity_insert newtable off
go
Run Code Online (Sandbox Code Playgroud)
您可能需要更改ID的处理方式,如果您的表按ID进行聚类,则效果最佳.
Ste*_*ung 15
如果要复制到新表中,最快的方法可能就是您的问题,除非您的行非常大.
如果您的行非常大,您可能希望在SQL Server中使用批量插入函数.我想你可以用C#打电话给他们.
或者您可以先将该数据下载到文本文件中,然后批量复制(bcp)它.这具有允许您忽略键,索引等的额外好处.
还可以尝试SQL Management Studio附带的导入/导出实用程序; 不确定它是否会像直接批量复制一样快,但它应该允许你跳过作为平面文件写出的中间步骤,并且只是直接从表到表复制,这可能比你的SELECT INTO陈述.
ear*_*xtr 11
我一直在使用DBA将具有240M行的审计表复制到另一个数据库.
使用简单的select/insert创建了一个巨大的tempdb文件.
使用导入/导出向导,但在10分钟内复制了8M行
创建自定义SSIS包并调整设置在10Min中复制30M行
SSIS软件包对我们来说是最快和最有效的
伯爵
这是传输大表的另一种方法.我刚刚在两台服务器之间传输了1.05亿行.很快.
有关详细信息,请参阅https://www.mssqltips.com/sqlservertutorial/202/simple-way-to-export-data-from-sql-server/
| 归档时间: |
|
| 查看次数: |
91682 次 |
| 最近记录: |