sqlite插入資料效率提公升解決方案

2021-07-10 15:44:46 字數 2584 閱讀 2598

sqlite插入效率對比

建表:create table if not existstttable(id integer primary key autoincrement,name varchar(100))

筆者電腦配置:

硬碟是250g三星ssd硬碟

cpu、os、記憶體如下

理論:sqlite 插入資料很慢的原因:sqlite在沒有顯式使用事務的時候會為每條insert都使用事務操作,而sqlite資料庫是以檔案的形式存在磁碟中,就相當於每次訪問時都要開啟一次檔案,如果對資料進行大量的操作,時間都耗費在i/o操作上,所以很慢。

解決方法是顯式使用事務的形式提交:因為我們開始事務後,進行的大量操作的語句都儲存在記憶體中,當提交時才全部寫入資料庫,此時,資料庫檔案也就只用開啟一次。

結論:(1)   效率最高:使用「事務+cpp呼叫方式」的方案插入效率最高。對比測試

一、四的commit插入即可得到該結論。

(2)   其次:使用「事務+一次插入多條記錄」的方案。

(3)   再次:使用「事務」次之

(4)   與要插入的記錄數有關。數量越多,效率的差別越明顯。

(5)   對比測試

一、三可以看出,一次插入多條記錄的方案,在記錄數為「萬」級別時效率上的提公升也並不明顯,仍然只有「秒」級。

插入的方法分為:

(1)   直接執行insert語句,乙個sql語句插入一條記錄。

(2)   在乙個insert語句中新增多個「值組」,即乙個insert插入多條記錄。

(3)   使用事務(transaction)。

(4)   儲存過程。

分析:(1)   在記錄較多時,一次插入多條記錄比一次插入單條記錄效率高。

(2)   在記錄較多時,使用事務能顯著提公升插入效率。

(3)   使用儲存過程比單純的插入的sql語句效率高。但是,sqlite不支援儲存過程。

結論:由下表可以明顯看出,使用事務比不使用,要插入的記錄數越多則效率越明顯。

記錄數commit插入耗時

無commit 插入耗時

0.091149 s

0.095510 s

0.073623 s

0.908365 s

0.107786 s

8.494171 s

0.164266 s

91.384458 s

1萬0.498805 s

417.994334 s 約7分鐘

10萬10.655899 s

9437.470941 s 約157分鐘

一次只執行乙個插入

記錄數commit插入耗時

無commit 插入耗時

0.089691 s

0.078871 s

0.839161 s

1.049796 s

8.439179 s

8.845316 s

88.707938 s

90.850646 s

1萬10萬

一條sql語句插入多條記錄,有commit。例項sql語句如下,**使用一次5條。

記錄數有commit

無commit 插入

0.077758 s

0.153611 s

0.104861 s

1.842270 s

0.100431 s

19.040623 s

1萬0.248039 s

188.313666 s

10萬1.948906 s

1878.265314 s

100萬

使用sqlite3提供的c++的呼叫方法測試插入效率。

記錄數有commit

無commit 插入

0.000898 s

0.000898 s

0.000837 s

0.007919 s

0.001376 s

0.084375 s

0.006201 s

0.849675 s

1萬0.051841 s

8.948034 s

10萬0.540143 s

88.447533 s

100萬

5.280978 s

1000萬

sqlite提公升效率

前言 sqlite資料庫由於其簡單 靈活 輕量 開源,已經被越來越多的被應用到中小型應用中。甚至有人說,sqlite完全可以用來取代c語言中的檔案讀寫操作。因此我最近編寫有關遙感資料處理的程式的時候,也將sqlite引入進來,以提高資料的結構化程度,並且提高大資料的處理能力 sqlite最高支援2p...

提公升SQLite資料插入效率低 速度慢的方法

本文為本人原創,請尊重個人勞動成果 sqlite資料庫由於其簡單 靈活 輕量 開源,已經被越來越多的被應用到中小型應用中。甚至有人說,sqlite完全可以用來取代c語言中的檔案讀寫操作。因此我最近編寫有關遙感資料處理的程式的時候,也將sqlite引入進來,以提高資料的結構化程度,並且提高大資料的處理...

提公升SQLite資料插入效率低 速度慢的方法

sqlite資料庫由於其簡單 靈活 輕量 開源,已經被越來越多的被應用到中小型應用中。甚至有人說,sqlite完全可以用來取代c語言中的檔案讀寫操作。因此我最近編寫有關遙感資料處理的程式的時候,也將sqlite引入進來,以提高資料的結構化程度,並且提高大資料的處理能力 sqlite最高支援2pb大小...