我有一个以整数时间戳作为主键的表。几乎该表上的每个查询都属于该模式
SELECT * FROM table WHERE timestamp BETWEEN x AND y
这些范围通常明显小于邮票的总范围。插入很少发生,通常在每个其他现有邮票之后的时间戳处发生。
我能否以某种方式告诉我的数据库(SQLite)保持这些条目“排序”,然后仅从开始时间戳进行选择,从那里搜索行,然后在超过结束时间戳时立即停止以避免有扫描整个表并比较每一行的值?或者这已经发生了?
我有一个以整数时间戳作为主键的表。几乎该表上的每个查询都属于该模式
SELECT * FROM table WHERE timestamp BETWEEN x AND y
这些范围通常明显小于邮票的总范围。插入很少发生,通常在每个其他现有邮票之后的时间戳处发生。
我能否以某种方式告诉我的数据库(SQLite)保持这些条目“排序”,然后仅从开始时间戳进行选择,从那里搜索行,然后在超过结束时间戳时立即停止以避免有扫描整个表并比较每一行的值?或者这已经发生了?
您正在寻找的内容称为索引,它可以满足您的两个目标。
索引保存按为索引定义的列的顺序预先排序的数据。他们还(通常)使用 B-Tree 数据结构来有效地存储数据,以便在查找树中包含服务所需数据的节点范围时不必扫描整个表您的查询。
在 SQLite 中,主键也会自动创建为聚集索引。所以你实际上不需要做任何额外的事情。但是,如果在您的特定示例中,您关心索引不是主键的字段,那么您需要定义这样的索引:
有关索引的更多信息,请参阅这篇文章。