SQLite UPDATE 100ms

Ron*_*Ron 1 c++ sql sqlite qt

我正在使用Qt数据库抽象层与Sqlite3进行交互.

int x = GetTickCount();
database.exec("UPDATE controls SET dtype=32 WHERE id=2");
qDebug() << GetTickCount()-x;
Run Code Online (Sandbox Code Playgroud)

该表是:

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
); 
Run Code Online (Sandbox Code Playgroud)

结果更新时间约为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);
Run Code Online (Sandbox Code Playgroud)

这家伙花了相同的时间.

Ver*_*reb 5

当您访问您的硬盘时,它可能需要很长时间.

尝试以下方法之一:

PRAGMA journal_mode = memory;
PRAGMA synchronous = off;

所以它不会立即触摸磁盘.

如果使用得好,SQLite可以非常快.您可以从缓存中回答小型数据库的select语句.

还有其他方法可以调整您的数据库.看到这样的其他问题: 提高SQLite的每秒INSERT性能?