我正在尝试用带抓取的聚集索引复制其他表中的6000万条记录。但在2000万张唱片之后,它的发展速度太慢了。我不知道我该怎么办。有人能帮帮我吗?这里是我的时间。
1000亿分钟:1
2000亿分钟:0
3000000百万分钟:0
4000亿分钟:2
5亿百万分:2
6000亿分钟:1
7000000百万分:0
800万百万分:1
9000000百万分钟:0
10000亿分钟:1
11000000百万分钟:0
120000百万分钟:1
130000百万分钟:1
14000000百万分钟:0
150000百万分钟:1
160000百万分钟:1
170000百万分钟:1
18000000百万分钟:0
190000百万分钟:1
20000亿分:3
21000亿分钟:3
2,000,000百万分:4
23000000百万分:5
24000000百万分:4
250000百万分:4
260000百万分:4
27000000百万分:4
280000百万分:5
29000000百万分:5
30000亿分:5
3100万百万分:6
320000百万分:7
330000百万分:7
34000000百万分:8
350000百万分:8
360000百万分:9
37000000百万分:8
380000百万分: 10
39000000百万分: 10
40000亿分钟: 11
4100万百万分: 11
42000亿分: 11
43000亿最小: 12
4400万百万分: 11
450000百万分: 12
460000百万分: 12
4700万最低: 14
480000百万分: 13
490000百万分: 13
50000000万分: 14
5100万百万分: 15
52000亿分: 14
5300万百万分: 16
5400亿百万分: 18
5500万百万分: 18
5600万百万最小: 20
570000百万分: 19
5800万百万分: 21
59000000百万分: 19
declare
@RecNo Int
, @RecCount Int
, @RecordST nvarchar(max)
, @str_date datetime
, @end_date datetime;
Set @RecNo = 0
select @RecCount = 1000000
While 1 = 1
Begin
set @str_date = getdate();
Insert Into dbo.test2(
ap_id
,lipt_id
,li_cntr
)
select
ap_id
,lipt_id
,li_cntr
from dbo.test
order by ap_id, lipt_id, li_cntr
offset @RecNo rows
fetch next @RecCount rows only;
if @@ROWCOUNT = 0
break
Set @RecNo += 1000000;
set @end_date = GETDATE() ;
set @RecordST = cast(@RecNo as nvarchar(max)) + ' Million Min:'+cast(DATEDIFF(MINUTE,@str_date,@end_date) as nvarchar(max))
RAISERROR(@RecordST,0,0) WITH NOWAIT
end发布于 2018-07-31 14:38:14
首先,你需要删除所有的约束,比如unique,PK等等。这是现有表中每次插入的瓶颈。
其次,如果您向表中插入的记录比现在多得多,那么可以使用SELECT INTO语句代替INSERT来提高性能。但请记住,SELECT INTO创建了一个新表,因此您需要考虑如何附加以前存在的记录。
最后但并非最不重要的一点是,您可以使用循环并批量插入1M记录。
https://stackoverflow.com/questions/51592262
复制相似问题