如果讓你的insert操作速度增加1000倍

2021-09-06 04:03:38 字數 2181 閱讀 9360

很多時候方法選對了對於我們做事將會是事半功倍。

大家平時都會使用insert語句,特別是有時候需要乙個大批量的資料來做測試,一條一條insert將會是非常慢的,那麼我們如何讓我們的inser更快呢。

先看個例子:

我們需要在如下這個表中插入測試資料,包含兩列,乙個是itemid,乙個是itemname。如果向這個表中插入103,680,000 條記錄,普通的插入方法可能需要20多天才能完成,但是用這裡介紹的新方法在5個小時內就能夠完成。

先看一般的資料插入方法,假設我們向上表中插入100000 條資料:

1

create table #temptable([item id] [bigint], [item name] nvarchar(

30))

2declare @counter

int3

set @counter =1

4while (@counter

<

100000

) 5

begin

6insert into #temptable values (@counter,

'hammer

')

7set @counter

=@counter +1

8end

9select

*from #temptable

10drop table #temptable

新的插入方法會使用已經插入的資料來進行下一條記錄的操作,原理如下:

那麼看看我的新insert**:

1

create table #temptable([item id] [bigint], [item name] nvarchar(

30))

2insert into #temptable values (1,

'hammer

')

3while((select count(

*) from #temptable)

<

100000

) 4

begin

5insert into #temptable ([item id], [item name])

6(select [item id]

+(select count(

*) from #temptable),

'hammer

'from #temptable)

7end

8select

*from #temptable

9drop table #temptable

用第一種方法可能需要幾十分鐘插入100000資料,但是用第二種只要4秒鐘。再改進下,2秒鐘就完成:

1

create table #temptable([item id] [bigint], [item name] nvarchar(

30))

2insert into #temptable values (1,

'hammer

')

3declare @counter

int4

set @counter =1

5while(@counter

<=

17)

6begin

7insert into #temptable ([item id], [item name])

8(select [item id]

+(select count(

*) from #temptable),

'hammer

'from #temptable)

9set @counter

=@counter +1

10end

11select

*from #temptable

12drop table #temptable

讓你的insert操作速度增加1000倍的方法

很多時候方法選對了對於我們做事將會是事半功倍。大家平時都會使用insert語句,特別是有時候需要乙個大批量的資料來做測試,一條一條insert將會是非常程式設計客棧慢的,那麼我們如何讓我們的inser更快呢。先看個例子 我們需要在如下這個表中插入測試資料,包含兩列,乙個是itemid,乙個是item...

INSERT語句的速度

mysql 5.5中文參考手冊 文件insert語句的速度 插入乙個記錄需要的時間由下列因素組成,其中的數字表示大約比例 這不考慮開啟表的初始化開銷,每個併發執行的查詢開啟。表的大小以logn b樹 的速度減慢索引的插入。加快插入的一些方法 如果同時從同乙個客戶端插入很多行,使用含多個value的i...

如果getHub的速度太慢

因為 githbu 是乙個國外的 使用雖然不需要翻牆,但是速度會很慢 解決方案 可以登入任意的 例如 站長之家 輸入 github 的 github.com 會所搜出所有的相關的網域名稱 13.229 188 59 開啟 hosts 檔案 c windows system32 drivers etc...