zoukankan      html  css  js  c++  java
  • 快速插入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逻辑读取 
     
  • 相关阅读:
    第8月第15天 app支持后台播放
    第8月第12天 python json.dumps danmu
    第7月第27天 c++11 boost
    第7月第26天 iOS httpserver
    第7月第25天 xcode bundle calayer动画
    我曾七次鄙视自己的灵魂
    learning shell display alert function(5)
    learning armbian steps(6) ----- armbian 源码分析(一)
    learning scala 数组和容器
    learning scala ide tools install
  • 原文地址:https://www.cnblogs.com/luluping/p/1888361.html
Copyright © 2011-2022 走看看