给出这样的表结构:
ID|Measurement|Diff|Date
其中ID
和Date
是复合主键,行由Date
列进一步编入索引。
我想使用触发器(在insert or replace into
之后)来计算表的Diff
列。 Diff
列只会记录同一Measurement
的两个相邻日期之间ID
值的差异。
在SQLite中执行此操作的最佳方式是什么?性能在这里至关重要,因为表很大,即1M +行。
答案 0 :(得分:2)
计算值的查询应该是这样的:
update structure
set new.diff = new.measurement - (select s.measurement
from structure s
where date < new.date
order by date desc
limit 1)
where id = new.id;
update
应使用主键索引来快速识别行。子查询应使用date
索引快速查找上一行。所以,这应该有合理的表现。