我正在使用Qt database abstraction圖層與Sqlite3進行交互。SQLite更新100ms
int x = GetTickCount();
database.exec("UPDATE controls SET dtype=32 WHERE id=2");
qDebug() << GetTickCount()-x;
表是:在〜100毫秒的更新時間
CREATE TABLE controls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
internal_id TEXT,
name TEXT COLLATE NOCASE,
config TEXT,
dtype INTEGER,
dconfig TEXT,
val TEXT,
device_id INTEGER REFERENCES devices(id) ON DELETE CASCADE
);
結果!即使沒有別的訪問數據庫,並且該表中總共有3條記錄。
對我來說這似乎很荒謬。 10條記錄已經需要一秒鐘才能完成。這是我應該從sqlite期望的表現還是讓我感到困惑的地方? SELECT查詢速度足夠快〜1ms。
編輯1
所以它不是Qt的。
sqlite3 *db;
if (sqlite3_open("example.db",&db) != SQLITE_OK)
{
qDebug() << "Could not open";
return;
}
int x = GetTickCount();
sqlite3_exec(db, "UPDATE controls SET dtype=3 WHERE id=2",0,0,0);
qDebug() << "Took" << GetTickCount() - x;
sqlite3_close(db);
這傢伙只需要相同的時間。
您使用的交易?嘗試使用'database.transaction(),database.exec('update here'),database.commit()'。有時,如果你有任何未提交的更新語句掛起,這將減慢插入/更新 –