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大小...