【发布时间】:2012-10-30 16:25:00
【问题描述】:
我正在使用Qt database abstraction 层与 Sqlite3 进行交互。
int x = GetTickCount();
database.exec("UPDATE controls SET dtype=32 WHERE id=2");
qDebug() << GetTickCount()-x;
表格是:
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
);
更新时间约为 100 毫秒!即使没有其他东西正在访问数据库,并且该表中总共有 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()。有时,如果您有任何未提交的更新语句挂起,这会减慢插入/更新速度