快速插入100W唯一数字的几种方案

 

 
--1.while循环 
 
declare @i  as int 
set @i =  0 
 
while(@i <  1000000
begin  
insert  into numbers values(@i) 
  set @i =@i+  1 
end  
 
--极度慢 
 
--2.6表卡迪尔 
 
DECLARE @t  TABLE  

   NUMBER INT 

 
INSERT  INTO @t 
SELECT  0 
UNION ALL 
SELECT  1 
UNION ALL 
SELECT  2 
UNION ALL 
SELECT  3 
UNION ALL 
SELECT  4 
UNION ALL 
SELECT  5 
UNION ALL 
SELECT  6 
UNION ALL 
SELECT  7 
UNION ALL 
SELECT  8 
UNION ALL 
SELECT  9 
 
INSERT  INTO numbers 
SELECT t1. NUMBER + t2. NUMBER *  10 + t3. NUMBER *  100 + t4. NUMBER *  1000 + t5. NUMBER *  10000 + t6. NUMBER *  100000 
FROM   @t  AS t1, 
       @t  AS t2, 
       @t  AS t3, 
       @t  AS t4, 
       @t  AS t5, 
       @t  AS t6  
 
--测试脚本 
 
-------------------------------------------------------------------------- 
 
 
DECLARE @beginTime DATETIME 
 
SET @beginTime=Getdate() 
--------------------------------- 
SET STATISTICS IO  ON 
 
DECLARE @t  TABLE ( 
   NUMBER INT ) 
 
INSERT  INTO @t 
SELECT  0 
UNION ALL 
SELECT  1 
UNION ALL 
SELECT  2 
UNION ALL 
SELECT  3 
UNION ALL 
SELECT  4 
UNION ALL 
SELECT  5 
UNION ALL 
SELECT  6 
UNION ALL 
SELECT  7 
UNION ALL 
SELECT  8 
UNION ALL 
SELECT  9 
 
INSERT  INTO numbers 
SELECT t1. NUMBER + t2. NUMBER *  10 + t3. NUMBER *  100 + t4. NUMBER *  1000 + t5. NUMBER *  10000 + t6. NUMBER *  100000 
FROM   @t  AS t1, 
       @t  AS t2, 
       @t  AS t3, 
       @t  AS t4, 
       @t  AS t5, 
       @t  AS t6 
 
-------------------------------- 
SELECT Datediff(ms, @beginTime, Getdate())  AS [ Time(ms)] 
 
SET STATISTICS IO  off 
TRUNCATE  TABLE numbers  
 
 
---强行释放内存,清除缓冲区数据 
 
DBCC FREEPROCCACHE  
DBCC FREESESSIONCACHE  
DBCC FREESYSTEMCACHE('All')  
DBCC DROPCLEANBUFFERS  
 
exec sp_configure ' max server memory',  128  
EXEC ('RECONFIGURE' ) 
 
WAITFOR DELAY ' 00: 00: 03
 
EXEC  sp_configure ' max server memory',  2147483647  
EXEC ('RECONFIGURE' ) 
GO  
 
 
 
--------------------------------------------------------------------------- 
 
--8343毫秒 
/* 
表 '#0CBAE877'。扫描计数 0,逻辑读取 10 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
 
(10 行受影响) 
表 'numbers'。扫描计数 0,逻辑读取 1003344 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
表 '#0CBAE877'。扫描计数 6,逻辑读取 111111 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
 
(1000000 行受影响) 
*/ 
 
--3.3表卡迪尔 
 
DECLARE @t  TABLE (  number INT ) 
INSERT   INTO @t 
         SELECT   0 
         UNION ALL 
         SELECT   1 
         UNION ALL 
         SELECT   2 
         UNION ALL 
         SELECT   3 
         UNION ALL 
         SELECT   4 
         UNION ALL 
         SELECT   5 
         UNION ALL 
         SELECT   6 
         UNION ALL 
         SELECT   7 
         UNION ALL 
         SELECT   8 
         UNION ALL 
         SELECT   9 
         UNION ALL 
         SELECT   10 
         UNION ALL 
         SELECT   11 
         UNION ALL 
         SELECT   12 
         UNION ALL 
         SELECT   13 
         UNION ALL 
         SELECT   14 
         UNION ALL 
         SELECT   15 
         UNION ALL 
         SELECT   16 
         UNION ALL 
         SELECT   17 
         UNION ALL 
         SELECT   18 
         UNION ALL 
         SELECT   19 
         UNION ALL 
         SELECT   20 
         UNION ALL 
         SELECT   21 
         UNION ALL 
         SELECT   22 
         UNION ALL 
         SELECT   23 
         UNION ALL 
         SELECT   24 
         UNION ALL 
         SELECT   25 
         UNION ALL 
         SELECT   26 
         UNION ALL 
         SELECT   27 
         UNION ALL 
         SELECT   28 
         UNION ALL 
         SELECT   29 
         UNION ALL 
         SELECT   30 
         UNION ALL 
         SELECT   31 
         UNION ALL 
         SELECT   32 
         UNION ALL 
         SELECT   33 
         UNION ALL 
         SELECT   34 
         UNION ALL 
         SELECT   35 
         UNION ALL 
         SELECT   36 
         UNION ALL 
         SELECT   37 
         UNION ALL 
         SELECT   38 
         UNION ALL 
         SELECT   39 
         UNION ALL 
         SELECT   40 
         UNION ALL 
         SELECT   41 
         UNION ALL 
         SELECT   42 
         UNION ALL 
         SELECT   43 
         UNION ALL 
         SELECT   44 
         UNION ALL 
         SELECT   45 
         UNION ALL 
         SELECT   46 
         UNION ALL 
         SELECT   47 
         UNION ALL 
         SELECT   48 
         UNION ALL 
         SELECT   49 
         UNION ALL 
         SELECT   50 
         UNION ALL 
         SELECT   51 
         UNION ALL 
         SELECT   52 
         UNION ALL 
         SELECT   53 
         UNION ALL 
         SELECT   54 
         UNION ALL 
         SELECT   55 
         UNION ALL 
         SELECT   56 
         UNION ALL 
         SELECT   57 
         UNION ALL 
         SELECT   58 
         UNION ALL 
         SELECT   59 
         UNION ALL 
         SELECT   60 
         UNION ALL 
         SELECT   61 
         UNION ALL 
         SELECT   62 
         UNION ALL 
         SELECT   63 
         UNION ALL 
         SELECT   64 
         UNION ALL 
         SELECT   65 
         UNION ALL 
         SELECT   66 
         UNION ALL 
         SELECT   67 
         UNION ALL 
         SELECT   68 
         UNION ALL 
         SELECT   69 
         UNION ALL 
         SELECT   70 
         UNION ALL 
         SELECT   71 
         UNION ALL 
         SELECT   72 
         UNION ALL 
         SELECT   73 
         UNION ALL 
         SELECT   74 
         UNION ALL 
         SELECT   75 
         UNION ALL 
         SELECT   76 
         UNION ALL 
         SELECT   77 
         UNION ALL 
         SELECT   78 
         UNION ALL 
         SELECT   79 
         UNION ALL 
         SELECT   80 
         UNION ALL 
         SELECT   81 
         UNION ALL 
         SELECT   82 
         UNION ALL 
         SELECT   83 
         UNION ALL 
         SELECT   84 
         UNION ALL 
         SELECT   85 
         UNION ALL 
         SELECT   86 
         UNION ALL 
         SELECT   87 
         UNION ALL 
         SELECT   88 
         UNION ALL 
         SELECT   89 
         UNION ALL 
         SELECT   90 
         UNION ALL 
         SELECT   91 
         UNION ALL 
         SELECT   92 
         UNION ALL 
         SELECT   93 
         UNION ALL 
         SELECT   94 
         UNION ALL 
         SELECT   95 
         UNION ALL 
         SELECT   96 
         UNION ALL 
         SELECT   97 
         UNION ALL 
         SELECT   98 
         UNION ALL 
         SELECT   99 
 
 
  
INSERT  INTO numbers   
SELECT  t1. number * 10 + t2. number  *  1000 + t3. number * 10000 
        *  1000 
FROM    @t  AS t1 , 
        @t  AS t2 , 
        @t  AS t3 
 
--测试脚本 
 
----------------------------------------------------------------------- 
DECLARE @beginTime DATETIME 
 
SET @beginTime=Getdate() 
--------------------------------- 
SET STATISTICS IO  ON 
DECLARE @t  TABLE (  number INT ) 
INSERT   INTO @t 
         SELECT   0 
         UNION ALL 
         SELECT   1 
         UNION ALL 
         SELECT   2 
         UNION ALL 
         SELECT   3 
         UNION ALL 
         SELECT   4 
         UNION ALL 
         SELECT   5 
         UNION ALL 
         SELECT   6 
         UNION ALL 
         SELECT   7 
         UNION ALL 
         SELECT   8 
         UNION ALL 
         SELECT   9 
         UNION ALL 
         SELECT   10 
         UNION ALL 
         SELECT   11 
         UNION ALL 
         SELECT   12 
         UNION ALL 
         SELECT   13 
         UNION ALL 
         SELECT   14 
         UNION ALL 
         SELECT   15 
         UNION ALL 
         SELECT   16 
         UNION ALL 
         SELECT   17 
         UNION ALL 
         SELECT   18 
         UNION ALL 
         SELECT   19 
         UNION ALL 
         SELECT   20 
         UNION ALL 
         SELECT   21 
         UNION ALL 
         SELECT   22 
         UNION ALL 
         SELECT   23 
         UNION ALL 
         SELECT   24 
         UNION ALL 
         SELECT   25 
         UNION ALL 
         SELECT   26 
         UNION ALL 
         SELECT   27 
         UNION ALL 
         SELECT   28 
         UNION ALL 
         SELECT   29 
         UNION ALL 
         SELECT   30 
         UNION ALL 
         SELECT   31 
         UNION ALL 
         SELECT   32 
         UNION ALL 
         SELECT   33 
         UNION ALL 
         SELECT   34 
         UNION ALL 
         SELECT   35 
         UNION ALL 
         SELECT   36 
         UNION ALL 
         SELECT   37 
         UNION ALL 
         SELECT   38 
         UNION ALL 
         SELECT   39 
         UNION ALL 
         SELECT   40 
         UNION ALL 
         SELECT   41 
         UNION ALL 
         SELECT   42 
         UNION ALL 
         SELECT   43 
         UNION ALL 
         SELECT   44 
         UNION ALL 
         SELECT   45 
         UNION ALL 
         SELECT   46 
         UNION ALL 
         SELECT   47 
         UNION ALL 
         SELECT   48 
         UNION ALL 
         SELECT   49 
         UNION ALL 
         SELECT   50 
         UNION ALL 
         SELECT   51 
         UNION ALL 
         SELECT   52 
         UNION ALL 
         SELECT   53 
         UNION ALL 
         SELECT   54 
         UNION ALL 
         SELECT   55 
         UNION ALL 
         SELECT   56 
         UNION ALL 
         SELECT   57 
         UNION ALL 
         SELECT   58 
         UNION ALL 
         SELECT   59 
         UNION ALL 
         SELECT   60 
         UNION ALL 
         SELECT   61 
         UNION ALL 
         SELECT   62 
         UNION ALL 
         SELECT   63 
         UNION ALL 
         SELECT   64 
         UNION ALL 
         SELECT   65 
         UNION ALL 
         SELECT   66 
         UNION ALL 
         SELECT   67 
         UNION ALL 
         SELECT   68 
         UNION ALL 
         SELECT   69 
         UNION ALL 
         SELECT   70 
         UNION ALL 
         SELECT   71 
         UNION ALL 
         SELECT   72 
         UNION ALL 
         SELECT   73 
         UNION ALL 
         SELECT   74 
         UNION ALL 
         SELECT   75 
         UNION ALL 
         SELECT   76 
         UNION ALL 
         SELECT   77 
         UNION ALL 
         SELECT   78 
         UNION ALL 
         SELECT   79 
         UNION ALL 
         SELECT   80 
         UNION ALL 
         SELECT   81 
         UNION ALL 
         SELECT   82 
         UNION ALL 
         SELECT   83 
         UNION ALL 
         SELECT   84 
         UNION ALL 
         SELECT   85 
         UNION ALL 
         SELECT   86 
         UNION ALL 
         SELECT   87 
         UNION ALL 
         SELECT   88 
         UNION ALL 
         SELECT   89 
         UNION ALL 
         SELECT   90 
         UNION ALL 
         SELECT   91 
         UNION ALL 
         SELECT   92 
         UNION ALL 
         SELECT   93 
         UNION ALL 
         SELECT   94 
         UNION ALL 
         SELECT   95 
         UNION ALL 
         SELECT   96 
         UNION ALL 
         SELECT   97 
         UNION ALL 
         SELECT   98 
         UNION ALL 
         SELECT   99 
 
 
  
INSERT  INTO numbers   
SELECT  t1. number * 10 + t2. number  *  1000 + t3. number * 10000 
        *  1000 
FROM    @t  AS t1 , 
        @t  AS t2 , 
        @t  AS t3 
 
 
-------------------------------- 
SELECT Datediff(ms, @beginTime, Getdate())  AS [ Time(ms)] 
 
SET STATISTICS IO  off 
TRUNCATE  TABLE numbers  
 
 
---强行释放内存,清除缓冲区数据 
 
DBCC FREEPROCCACHE  
DBCC FREESESSIONCACHE  
DBCC FREESYSTEMCACHE('All')  
DBCC DROPCLEANBUFFERS  
 
exec sp_configure ' max server memory',  128  
EXEC ('RECONFIGURE' ) 
 
WAITFOR DELAY ' 00: 00: 03
 
EXEC  sp_configure ' max server memory',  2147483647  
EXEC ('RECONFIGURE' ) 
GO  
 
 
--8123毫秒,稍微比2方案快,以为第三个表的逻辑扫描减少 
/* 
表 '#1367E606'。扫描计数 0,逻辑读取 100 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
 
(100 行受影响) 
表 'numbers'。扫描计数 0,逻辑读取 1003344 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
表 '#1367E606'。扫描计数 3,逻辑读取 10101 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
 
(1000000 行受影响) 
*/ 
 
 
 
--4.Identity 
 
declare @beginTime datetime 
  
set @beginTime=getdate() 
  
SELECT TOP  1000000  IDENTITY(INT, 0, 1AS idx 
  
    INTO dbo.Numbers2 
  
    FROM master.sys.all_columns c1 
  
  CROSS JOIN master.sys.all_columns c2 
  
select datediff(ms,@beginTime,getdate())  as [ Time(ms)] 
 
 
 
----------------------------------------------------- 
SET STATISTICS IO  off 
 
 
 
---强行释放内存,清除缓冲区数据 
 
DBCC FREEPROCCACHE  
DBCC FREESESSIONCACHE  
DBCC FREESYSTEMCACHE('All')  
DBCC DROPCLEANBUFFERS  
 
exec sp_configure ' max server memory',  128  
EXEC ('RECONFIGURE' ) 
 
WAITFOR DELAY ' 00: 00: 03
 
EXEC  sp_configure ' max server memory',  2147483647  
EXEC ('RECONFIGURE' ) 
GO  
 
 
 
--2876毫秒,无IO逻辑读取 
 
 
--5.row_number 
 
declare @beginTime datetime 
  
set @beginTime=getdate() 
  
  SELECT TOP  1000000 
  
       ROW_NUMBER() over ( order  by c1.object_id)  AS N 
  
    INTO dbo.Numbers3 
  
    FROM master.sys.all_columns c1 
  
  CROSS JOIN master.sys.all_columns c2 
  
select datediff(ms,@beginTime,getdate())  as [ Time(ms)] 
----------------------------------------------------- 
SET STATISTICS IO  off 
 
 
 
---强行释放内存,清除缓冲区数据 
 
DBCC FREEPROCCACHE  
DBCC FREESESSIONCACHE  
DBCC FREESYSTEMCACHE('All')  
DBCC DROPCLEANBUFFERS  
 
exec sp_configure ' max server memory',  128  
EXEC ('RECONFIGURE' ) 
 
WAITFOR DELAY ' 00: 00: 03
 
EXEC  sp_configure ' max server memory',  2147483647  
EXEC ('RECONFIGURE' ) 
GO  
 
 
--1270毫秒,无IO逻辑读取 
 
 
 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值