【发布时间】:2017-11-19 04:55:44
【问题描述】:
我在 VB.NET 应用程序中创建了一个 SQLite 数据库。它在 2 个表中存储多个 varName 记录的时间序列数据:
-
表
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 ... | .... | ...
第一个表包含varName 和ID。第二个包含每个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 的性能提高到第二个表中?
【问题讨论】:
-
取决于你如何做事......如果你的数据量很少,它应该不会很慢。如果可能的话,您可以将 id 的值存储在您的 .net 代码中,或者获取 last inserted row id。
标签: database vb.net sqlite query-performance