我正在使用vb.net应用程序中的SQLite数据库。数据库应该存储许多变量的时间序列数据。 现在我正在尝试使用以下两个表构建数据库:
表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的所有变量名。第二个表包含许多时间步的每个变量的值(由时间戳表示)。外键通过变量ID链接表。
构建数据库工作正常。
现在我想查询数据库并绘制所选变量的时间序列。为此,我使用以下语句:
select [timestamp], [varValue] FROM varValues WHERE (SELECT id from varNames WHERE varName= '" & NAMEvariable & "');
由于用户不知道变量ID,只有变量的名称(在NAME变量中)我使用..WHERE(SELECT ...语句。这似乎真的会降低性能。时间序列有高达50k点。
有没有更好的方法来查询特定变量的值,这些变量只能通过其名称来解决?
答案 0 :(得分:0)
您可能应该使用join查询,例如:
SELECT a.[timestamp], a.varValue
FROM varValues AS a, varNames AS b
WHERE b.varName = <name>
AND a.id = b.ID
编辑:要查询多个参数,请使用以下内容:
SELECT a.[timestamp], a.varValue
FROM varValues AS a, varNames AS b
WHERE b.varName IN (<name1>, <name2>, ...)
AND a.id = b.ID