1

Qtデー​​タベース抽象化レイヤーを使用して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レコードは、完了するのにすでに1秒かかります。これは私が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);

この男はちょうど同じ時間かかります。

4

1 に答える 1

5

ハードディスクにアクセスすると、時間がかかる場合があります。

次のいずれかを試してください。

PRAGMA journal_mode = memory;
PRAGMA synchronous = off;

そのため、すぐにディスクに触れることはありません。

SQLiteをうまく使用すると、非常に高速になります。小さなデータベースのselectステートメントは、キャッシュから応答されます。

データベースを微調整する方法は他にもあります。このような他の質問を参照してください: SQLiteの1秒あたりのINSERTのパフォーマンスを改善しますか?

于 2012-10-30T16:36:03.000 に答える