【发布时间】:2023-03-12 15:59:01
【问题描述】:
我是 SQL Server 的新手,遇到以下困境:
我有两个结构相同的表。称它为runningTbl 和finalTbl。
runningTbl 每 15 分钟包含大约 600 000 到 100 万行。
在runningTbl 中进行一些数据清理后,我想将所有记录移动到finalTbl。
finalTbl 目前大约有 3800 万行。
以上过程需要每15-20分钟重复一次。
问题在于,将数据从 runningTbl 移动到 finalTbl 有时需要超过 20 分钟。
最初,当表格很小时,复制需要 10 秒到 2 分钟。
现在需要的时间太长了。
任何人都可以帮助解决这个问题?要遵循的 SQL 查询..
谢谢
【问题讨论】:
-
到目前为止,我已经尝试了两种不同的查询... Q1: INSERT INTO [mydb].[dbo].[processed_logs] ([UnixTime] ,[ElapsedTime] ,[ClientIP] ,[Trans ] ,[ResponseSize] ,[Request1] ,[RequestAddress] ,[FullUserName] ) SELECT [UnixTime] ,[ElapsedTime] ,[ClientIP] ,[Trans] ,[ResponseSize] ,[ofRequest1] ,[RequestAddress] ,[FullUserName] FROM [mydb].[dbo].[unprocessed_logs]
-
到目前为止您尝试过哪些查询?您是否尝试过使用 SELECT INTO?
-
表上有索引吗?可以贴一下查询的执行计划吗?
-
DECLARE @FileName varchar(50), @bcpCommand varchar(2000) SET @FileName = 'E:\export\templog.swork' --export SET @bcpCommand = 'bcp "SELECT * FROM mydb ..unprocessed_logs" queryout "' SET @bcpCommand = @bcpCommand + @FileName + '" -U 用户 -P 密码 -c' EXEC master..xp_cmdshell @bcpCommand --import SET @bcpCommand = 'bcp "mydb..processed_logs"在 "' SET @bcpCommand = @bcpCommand + @FileName + '" -U 用户 -P 密码 -c' EXEC master..xp_cmdshell @bcpCommand2
-
刚刚处理了一个类似的问题,我强烈建议用 c# 编写一个服务/应用程序并改用 SqlBulkCopy,它更加灵活/健壮
标签: sql-server sql-server-2005 sqlbulkcopy bcp