天天看點

sqlite3與mysql性能_Sqlite3檔案資料庫與記憶體資料庫的性能差異

這不是一個有說服力的測試,算是我的體驗吧

通過pandas.read_csv函數将總共1.44GB的164個csv檔案依次(轉為dataframe對象,并新增2條series,再将該dataframe通過 pandas.to_sql函數寫成1.23GB的sqlite資料庫檔案,從導入第四個檔案後,就越來越慢,懷疑是緩存不足,總共花費兩個多小時。

sqlite3與mysql性能_Sqlite3檔案資料庫與記憶體資料庫的性能差異

而sqlite3.connect(':memory:')寫入記憶體資料庫僅需2分鐘多,當然還沒轉儲到磁盤,相信轉儲花的時間應該也不多。

sqlite3與mysql性能_Sqlite3檔案資料庫與記憶體資料庫的性能差異

峰回路轉:

在查找如何将記憶體資料寫入檔案的時候發現,pandas的to_sql方法預設是帶index寫入的,這種大量insert語句操作導緻了導入越來越慢

修改語句為 data.to_sql(filename[0:11],conn,if_exists='append',index=False)

無index,csv-》記憶體資料庫-》寫入檔案

sqlite3與mysql性能_Sqlite3檔案資料庫與記憶體資料庫的性能差異

無index,csv-》寫入檔案

sqlite3與mysql性能_Sqlite3檔案資料庫與記憶體資料庫的性能差異

結論:無index插入是必須的,先寫記憶體資料庫再倒到檔案,還是直接寫檔案,看檔案的資料量和計算機的記憶體做取舍。