SQL批量資料匯入,效能測試

2021-06-07 04:09:17 字數 1605 閱讀 5377

1,第一種方法,迴圈插入

在迴圈裡,用insert語句,注意要加上begin tran 和commit tran 否則慢的嚇人。

原因可能是每次發行事務需要開銷,不顯示指定事務,每次執行insert語句都會發行一次事務。

if object_id('t_sample') is null

begin

create table t_sample

( id varchar(10) not null primary key,

txt varchar(10));

endgo

delete from t_sample;

declare @count int;

set @count =1;

begin tran;

while @count<1000000

begin

insert into t_sample values (convert(varchar(10),@count),convert(varchar(10),rand()*200000));

set @count = @count +1;

endcommit tran;

select * from t_sample;

耗時:1分半

2,第二種方法,借助臨時表,迴圈次數明顯減少,效率提公升了

--主表

if object_id('t_sample') is null

begin

create table t_sample

( id varchar(10) not null primary key,

txt varchar(10));

endgo

delete from t_sample;

--用臨時表來暫存資料,關鍵點是

--臨時表不是一條一條的插入的,每次插入的是

--前一次的記錄數

if object_id('t_temp') is not null

drop table t_temp;

create table t_temp

( id int not null primary key,

rnd float

);declare @rc int,@max int;

set @rc =1;

set @max = 2000000;

insert into t_temp values(1,rand());

while @rc * 2 <= @max

begin

insert into t_temp select (id + @rc) as id ,rand() as rnd from t_temp;

set @rc = @rc * 2;

endinsert into t_sample

select id, cast(ceiling(rnd * 10000000000) as numeric(10,0)) from t_temp

--(1048576 row(s) affected) 36s

耗時:36秒

備註:兩種方式都是插入100萬條左右的資料

sql 批量插入測試資料

declare istart int declare iend int declare i int declare icount int set istart 1 set iend 100000 set i istart while i iend begin insert into websites...

Oracle 從SQL檔案批量匯入資料

進入dos介面。進入sql檔案目錄。在命令提示下執行sqlplus,c sql sqlplus user name password net service name 指定sql執行日誌檔案,日誌檔名任意,但必須以log為字尾名 sql spool e temp a.log 建立批量執行檔案。如果要...

jdbc批量匯入資料

jdbc批量插入主要用於資料匯入和日誌記錄因為日誌一般都是先寫在檔案下的等。我用mysql 5.1.5的jdbc driver 分別對三種比較常用的方法做了測試 try prest.executebatch conn.commit conn.close catch sqlexception ex c...