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