批量插入100萬條資料

2022-01-18 09:54:19 字數 2692 閱讀 6085

建立資料庫:

--create database

create database bulktestdb;

gouse bulktestdb;

go--create table

create table bulktesttable(

id int primary key,

username nvarchar(32),

pwd varchar(16))

go--create table valued

create type bulkudt as table

(id int,

username nvarchar(32),

pwd varchar(16))

第一種,普通sql用insert插入:

stopwatch sw = new stopwatch();

sqlconnection sqlconn = new sqlconnection(

configurationmanager.connectionstrings["connstr"].connectionstring);//連線資料庫

sqlcommand sqlcomm = new sqlcommand();

sqlcomm.commandtext = string.format("insert into bulktesttable(id,username,pwd)values(@p0,@p1,@p2)");//引數化sql

sqlcomm.parameters.add("@p0", sqldbtype.int);

sqlcomm.parameters.add("@p1", sqldbtype.nvarchar);

sqlcomm.parameters.add("@p2", sqldbtype.varchar);

sqlcomm.commandtype = commandtype.text;

sqlcomm.connection = sqlconn;

sqlconn.open();

try", count * multiply);

sqlcomm.parameters["@p2"].value = string.format("pwd-", count * multiply);

sw.start();

sqlcomm.executenonquery();

sw.stop();

}//每插入10萬條資料後,顯示此次插入所用時間

console.writeline(string.format("elapsed time is milliseconds", sw.elapsedmilliseconds));}}

catch (exception ex)

finally

console.readline();

第二種,用bulk;

bulk方法主要思想是通過在客戶端把資料都快取在table中,然後利用sqlbulkcopy一次性把table中的資料插入到資料庫

public static void bulktodb(datatable dt)

catch (exception ex)

finally

}public static datatable gettableschema()

); return dt;

}static void main(string args)

", count * multiply);

r[2] = string.format("pwd-", count * multiply);

dt.rows.add(r);

}sw.start();

bulk.bulktodb(dt);

sw.stop();

console.writeline(string.format("elapsed time is milliseconds", sw.elapsedmilliseconds));

}console.readline();

}

第三,錶值引數法;

錶值引數是sql server 2008新特性,簡稱tvps。對於錶值引數不熟悉的朋友,可以參考最新的book online;其速度比bulk還快5s。

public static void tablevaluedtodb(datatable dt)

}catch (exception ex)

finally

}public static datatable gettableschema()

); return dt;

}static void main(string args)

", count * multiply);

r[2] = string.format("pwd-", count * multiply);

dt.rows.add(r);

}sw.start();

tablevalued.tablevaluedtodb(dt);

sw.stop();

console.writeline(string.format("elapsed time is milliseconds", sw.elapsedmilliseconds));

}console.readline();

}

Oracle查詢前100萬條資料

oracle不支援select top語句,在oracle中經常是用order by跟rownum select 列名1 列名n from select 列名1 列名n from 表名 order by 列名1 where rownum n 抽出記錄數 order by rownum asc 如 按...

SQL 快速向表中插入100萬條資料

setnocounton 02use master 03go 04 判斷資料庫testdb是否存在,即建立資料庫 05if db id testdb isnull 06createdatabasetestdb 07go 08use testdb 09go 10 判斷nums 表是否存在,存在即將其刪...

PHP爬蟲 100萬條資料其實不難

php爬取100萬條資料,首先要思考這三個問題 怎麼爬取?怎麼提公升爬取速度?怎麼存放爬取的資料?第乙個想到是不是分布式爬蟲呢,主機多的話是可以這麼張狂任性的,單機的話就要內斂些了。不能分布式,那可以多執行緒啊,換個方向也是很有逼格的。php多執行緒,我首選 swoole 了,不僅可以 多執行緒,還...