以最快的方式生成大量的測試資料

2021-07-11 04:49:26 字數 1964 閱讀 1910

use tempdb

goif object_id('tempdb..#tmp') is not null

drop table #tmp

gocreate table #tmp(

id bigint identity(1,1) primary key,

n nvarchar(max) )go

set nocount on

declare @i int,@imax int

set @imax=10000000

while 1=1

begin

select @i=count(1) from #tmp

print @i

if @i>=@imax

begin

break;

endif @i=0

begin

insert into #tmp (n) values(n'***************')

endif @i<=@imax/2

begin

insert into #tmp (n)

select n from #tmp

endelse

begin

insert into #tmp (n)

select top( @imax-@i ) n from #tmp

endend-- 1000 萬資料也就 2 分 13 秒

-- insert into #tmp(n) values('***x') go 10000000 這種方式雖然寫法簡單,但相當於迴圈一條條地插,效率不高。

——————————————————————————— 分割線 ——————————————————————————

另外也可以用 cte 來做, 雖然慢一點, 但勝在寫法簡單吧:

下面是兩種寫法實現同樣功能的對比:

迴圈:28秒

if object_id('tmp') is not null drop table tmp

gocreate table tmp(id bigint not null primary key)

goset nocount on

declare @i int,@imax int

set @imax=10000000

insert into tmp (id) values(1)

while 1=1

begin

select @i=max(id) from tmp

if @i<=@imax/2

begin

insert into tmp (id)

select @i+id from tmp order by id

endelse

begin

insert into tmp (id)

select top( @imax-@i ) @i+id from tmp order by id

break;

endend

cte: 2分25秒

if object_id('dbo.spt_values') is not null

drop table dbo.spt_values

gocreate table dbo.spt_values(

id int not null primary key )go

;with seq(id) as (

select 1

union all

select id + 1

from seq

where id < 10000000

) insert into dbo.spt_values(id)

select * from seq as s

option(maxrecursion 0)

快速生成大量測試資料

sql是利用了oracle資料庫語法的幾個實用小技巧實現的 1 利用oracle特有的 connect by 樹形連線語法生成測試記錄,level 10 表示要生成10記錄 2 利用rownum虛擬列生成遞增的整數資料 3 利用sysdate函式加一些簡單運算來生成日期資料,本例中是每條記錄的時間加...

oracle索引 快速生成大量測試資料

1.建立索引 create index on tablespace 2.刪除索引 drop index3.重置索引 alter index rebuild4.索引特點第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。第三,...

構造大量測試資料的方法(MySql)

建立測試表 create table sys user id char 32 not null default comment 主鍵 username varchar 100 not null default comment 使用者名稱 password char 32 not null defau...