我在 VB.NET 应用程序中创建了一个SQLite数据库。它存储多个varName
记录的时间序列数据超过2个表:
-
表
varNames
:CREATE TABLE IF NOT EXISTS varNames( id INTEGER PRIMARY KEY, varName TEXT UNIQUE );
它看起来像这样:
ID | varName --------------- 1 | var1 2 | var2 ... | ...
-
表
varValues
:CREATE TABLE IF NOT EXISTS varValues( timestamp INTEGER, varValue FLOAT, id INTEGER, FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE );
它看起来像这样:
timestamp | varValue | id ------------------------------ 1 | 1.0345 | 1 4 | 3.5643 | 1 1 | 7.7866 | 2 3 | 4.5668 | 2 ... | .... | ...
第一个表包含带有 ID
的varName
。第二个包含每个varName
的值作为时间序列(每timestamp
(。外键链接表。插入到varNames
如下所示:
INSERT OR REPLACE INTO varNames (
varName
) VALUES (
@name
);
我将特定varName
的值插入到第二个表中,如下所示:
INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);
我不知道插入时相应varValues
记录的varName
ID
。这就是为什么我使用:
(SELECT id FROM varNames WHERE varName = @name)
与直接ID
解决相比,似乎很慢。如何将INSERT
性能提高到第二个表中?
...提高第二个表中的插入性能?
使用事务(最好合并多个INSERT
(:
BEGIN TRANSACTION;
INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);
INSERT OR REPLACE INTO varValues (
timestamp,
varValue,
id
) VALUES (
@timestamp,
@value,
(SELECT id FROM varNames WHERE varName = @name)
);
etc. ...
END TRANSACTION;
相关。