sqlite資料庫本質上來講就是乙個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是乙個很好時的過程,會極大地影響資料庫訪問的速度。例如:向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行query.exec("insert into database(......) values(......)");就會開啟和關閉檔案100萬次,所以速度當然會很慢。sqlite資料庫是支援事務操作的,於是我們就可以通過事務來提高資料庫的讀寫速度。事務的基本原理是:資料庫管理系統首先會把要執行的sql語句儲存到記憶體當中,只有當commit()的時候才一次性全部執行所有記憶體中的資料庫。下面是乙個簡單的qt sqlite資料庫事務的例子:
using namespace std;
qsqldatabase db_sqlite = qsqldatabase::adddatabase("qsqlite", "connsqlite");
db_sqlite.setdatabasename("sqlitedb.db3");
db_sqlite.open();
qsqlquery query("", db_sqlite);
bool bsuccess = false;
qtime tmptime;
// 開始啟動事務
db_sqlite.transaction();
tmptime.start();
for(int i = 0; i<100000; i++)
{bsuccess = query.exec("insert into database(d_1,d_2,d_3,d_4,d_5) values('tt','tt','tt','tt','tt')");
if (!bsuccess)
{cout<<"error occur"db_sqlite.commit();
cout<<"10000條資料耗時:"《其實qt 操作sqlite資料庫增加事務的功能就是上面例子中藍色字型標出的兩句話,如果去掉這兩句話,程式又會還原為:開啟檔案——執行 query.exec(...)——關閉檔案。大家可以試一下,新增這兩句即增加事務以後資料插入的速度明顯提高很多。
在入庫和更新過程中按照資料庫事務的思想進行設計:sqlite執行入庫、更新操作的方式是,sql語句執行物件控制代碼呼叫庫函式開啟檔案、呼叫函式執行sql語句、關閉檔案。這樣的執行方式對於數量級別超大的檔案的弊端就是每次執行sql語句的時候都要開啟檔案(假設百萬級數量級的資料,就要開啟和關閉檔案百萬次),對於資料庫的入庫和更新操作時間主要都浪費到了檔案的開啟和關閉操作上,所以這裡增加事務以解決該問題。
Qt中提高SQLite的讀寫速度
sqlite資料庫本質上來講就是乙個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是乙個很耗時的過程,會極大地影響資料庫訪問的速度。例如 向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行query.exec insert into database va...
Qt中提高sqlite的讀寫速度
sqlite資料庫本質上來講就是乙個磁碟上的檔案,所以一切的資料庫操作其實都會轉化為對檔案的操作,而頻繁的檔案操作將會是乙個很好時的過程,會極大地影響資料庫訪問的速度。例如 向資料庫中插入100萬條資料,在預設的情況下如果僅僅是執行query.exec insert into database va...
提高sqlite效能的辦法
最近有個涉及到對sqlite操作的專案,由於對sqlite資料庫進行頻繁地 寫,讀,查詢 的操作,但是由於查詢這塊每次要取出大概10w條,這樣的耗時就非常大。因為sqlite的資料庫的操作需要加鎖 寫單獨乙個執行緒,讀又是乙個執行緒,查詢又是另乙個執行緒 這樣的話就存在3個執行緒搶一把鎖,但是因為查...