我的VB.NET应用程序生成我想要存储在SQLite数据库中的模拟数据。数据由数百个变量组成,这些变量具有最多50k时间步长(出现次数/测量值)的值。变量数是可变的。时间步长从10到50k不等。
到目前为止,我有一张桌子。第一列包含时间戳(主键),以下包含每个变量的变量值(列名=变量名)。这些行用每个时间步的时间戳和变量值填充:
timestamp | var1 | var2 | var3 | ...
----------------------------------------------
1 | var1(1) | var2(1) | var3(1) | ...
2 | var1(2) | var2(2) | var3(2) | ...
3 | var1(3) | var2(3) | var3(3) | ...
... | ... | ... | ... | ...
我用:
CREATE TABLE variables(timestamp INTEGER PRIMARY KEY, var1 REAL, var2 REAL, ...);
这很有效。我使用数据库保存模拟数据以供以后评估。我需要绘制选定的时间序列并将特定时间跨度的某些变量的值复制到Excel(计算总和,最大值等)。
我已经读过不添加太多列(我可能有超过500个变量/列)。关于性能,以不同的方式构建它是否更好?例如,一个包含四列的表格:ID (primary key)
,timestamp
,variable name
和variable value
。
ID | timestamp | varName | varValue
------------------------------------
1 | 1 | var1 | var1(1)
2 | 2 | var1 | var1(2)
...| ... | ... | ...
50 | 50 | var1 | var1(50)
51 | 1 | var2 | var2(1)
52 | 2 | var2 | var2(2)
...| ... | ... | ...
在这种情况下,我将有50k时间步长* 500个变量= 2500万行,但是有固定数量的列。还有更好的办法吗?
如果我已按行timestamp
次序插入行,会对性能(对于读取查询)发生什么?