关于若干数据库数据插入性能的对比
????? 前幾天,苦惱于到底使用哪一種本地數據庫來存儲部分數據,于是決定做一個數據插入測試進行求證。
????? 本地數據庫接觸不多,最早用過Access,但現在SQLite功能更加強大--而且,說實在的我不喜歡Access,連帶著不喜歡SqlServer,只要一看到滿眼的@號go號我就頭暈不止;更何況有一個我感覺非常致命的問題:分頁太麻煩!遠不如mySql/SQLite中的limit或者Oracle中的rownum來得痛快。
????? 平時基本使用Oracle,對它的性能知根知底了;mySql近年來混得風生水起,想必有過人之處,也一并納入測試范圍了。
????? 另外,Access現在有2007版,不知道和2003版在性能上有什么區別沒有?特意分開進行測試。
測試環境如下:
????? 服務器:本機(筆記本,I3 370,8G內存)
????? 操作系統:windows 7 x64
????? 語言環境:C#,使用控制臺程序測試。
????? 虛擬機:安裝SqlServer2008,2CPU,3G內存。
????? 數據庫:Oracle11g(本機數據庫)
??????????? SQLite(本機文件)
??????????? MySql(版本5的綠色版)
??????????? SqlServer(不想在本機安裝2008版本,本來想使用本機的學習版,但死活不行,只好在本機虛擬機上安裝一個2008版本,測試性能有所下降,但也只好如此了)
?????????? ?Access(2003版)
??????????? Access(2007版)
????? 測試方法:先生成10000條記錄(每條記錄6個字段),插入數據前先清除原有數據;
????? 數據插入分為事務性寫入(啟動事務,逐條插入后提交)及非事務性寫入(不啟動事務,逐條插入)。
??????SqlServer數據庫在本地虛擬機的數據庫中,數據不太準確;為消除網絡操作影響,將代碼移到虛擬中直接執行一次。
測試過程中發現了若干有趣的問題:
????? 1.64位操作系統下,Access無法在編譯為AnyCpu的程序下執行,必須編譯為x86方可正常操作。(如果是網站,必須將池設置為啟用32位兼容)
????? 2.SQLite有64位版本的DLL,可以正常在64位環境(控制臺程序)下運行;但很奇怪的是,如果是網站,則使用64位DLL反而無法正常運行,必須使用32位版本的DLL,并且將IIS的池設置為啟用32位兼容才可正常運行。
????? 3.Access的2003版本與2007版本的數據庫連接串是不相同的,如下:
??????? 2003:@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\xxx\test.mdb";
??????? 2007:@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\xxx\test.accdb";
測試結果如下:
| 數據庫類別 | 插入數量 | 本地事務(毫秒) | 本地無事務(毫秒) | 說明 | ||
| 每條記錄耗時 | 每秒插入條數 | 每條記錄耗時 | 每秒插入條數 | |||
| Oracle | 10000 | 0.23 | 4300 | 0.9 | 1103 | 本地數據庫 |
| Sqlite | 10000 | 0.0998 | 10016 | 6.86 | 146 | 本地數據庫 |
| MySql | 10000 | 0.2574 | 3884 | 4.132 | 241 | 本地數據庫 |
| Sql Server | 10000 | 0.42 | 2380 | 1.52 | 654 | 遠程數據庫 |
| Sql Server | 10000 | 0.413 | 2418 | 1.433 | 697 | 本地數據庫,2CPU,2G內存 代碼直接在虛擬機運行 |
| Access2003 | 10000 | 0.6 | 1664 | 46.87 | 21.33 | 本地數據庫 |
| Access2007 | 10000 | 0.73 | 1369 | 47.57 | 21.02 | 本地數據庫 |
結果很有意思:
????? 1.SQLite的事務插入速度最快,達到10000條每秒,但非事務性的插入速度就一般了。
????? 2.Oracle作為數據庫的老大,事務插入速度僅次于SQLite,但非事務性的插入速度居首。
????? 3.可憐Access,不試不知道,一試嚇一跳,事務插入最慢,非事務插入更慢;本來對Access2007還有點期待的,沒想到它比2003版本的數據還差。
????? 4.mySql還真是不賴,事務插入的性能僅次于Oracle,非事務性的插入沒有那么強,但也還不錯。
????? 從數據來看,發覺一個比較有規律的現象:大型數據庫與小型數據庫、本地型數據庫的區別,不在于事務性插入性能的高低,而在于非事務性插入性能的高低。Oracle最強,每秒達到1000條以上;其次是SqlServer,也有700條每秒;mySql相比之下就差多了,只達到240條每秒左右,這個性能整整差了一個等級;比較意外的是SQLite,非事務性插入性能雖然比mySql差一點,但也相差不大(不是數量級的差別);最糟糕的是Access,非事務數據插入性能慘不忍睹,和SQLite相比,整整差了一個數量級。
????? 由上可見,如果選擇本地數據庫,SQLite應該是首選。而且在應用中還應該注意,盡可能把數據集中起來進行事務性數據寫入,如此可以大大提升該數據庫的性能。
?
轉載于:https://www.cnblogs.com/hchxxzx/archive/2011/10/17/2215797.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的关于若干数据库数据插入性能的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]Android创世纪 - 第二天
- 下一篇: url加密解密的一个cs类