【发布时间】:2017-06-13 10:56:18
【问题描述】:
我正在 vb.net 应用程序中使用 SQLite 数据库。数据库应该存储许多变量的时间序列数据。 现在我正在尝试使用以下 2 个表构建数据库:
-
表变量名称:
CREATE TABLE IF NOT EXISTS varNames(id INTEGER PRIMARY KEY, varName TEXT UNIQUE);
看起来像这样:
ID | varName
---------------
1 | var1
2 | var2
... | ...
-
表变量值:
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,只知道变量的名称(在 NAMEvariable 中)我使用 ..WHERE (SELECT... 语句。看起来这确实会降低性能。时间序列有高达 50k 点。
有没有更好的方法来查询只能通过其名称来寻址的特定变量的值?
【问题讨论】: