• 快速插入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逻辑读取 
     
  • 相关阅读:
    java中生成流水号的一个例子(使用关系型数据库)
    润乾报表锁定表头的实现方法
    android DVM
    SAX与DOM解析XML的区别
    RunnableException与CheckedException
    android 内存管理机制、异常、垃圾回收
    单元测试
    SAP C4C url Mashup的跳转工作原理
    SAP Cloud for Customer的Mashup位于CustomPane里
    SAP C4C的URL Mashup无法添加到embedded component里去
  • 原文地址:https://www.cnblogs.com/luluping/p/1888361.html
Copyright © 2020-2023  润新知