首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >百万级记录速度太慢

百万级记录速度太慢
EN

Stack Overflow用户
提问于 2018-07-30 18:47:29
回答 1查看 117关注 0票数 0

我正在尝试用带抓取的聚集索引复制其他表中的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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-07-31 14:38:14

首先,你需要删除所有的约束,比如unique,PK等等。这是现有表中每次插入的瓶颈。

其次,如果您向表中插入的记录比现在多得多,那么可以使用SELECT INTO语句代替INSERT来提高性能。但请记住,SELECT INTO创建了一个新表,因此您需要考虑如何附加以前存在的记录。

最后但并非最不重要的一点是,您可以使用循环并批量插入1M记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51592262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档