SQLITE3:恒定时间行寻址

SQLITE3: Constant time row addressing

是否可以在恒定时间 jump 操作中通过 ID 访问 sqlite3 table 中的行,而不是我假设的 O(n log n) 索引搜索?

给定一个 table ,其中每一行包含一个 'object' 并且其 id 是连续的 id 列表之一,理论上可以跳转到具有相应的 id 在常数时间内。这相当于将行 pointers 存储在 table.

sqlite 允许这样做吗?通过什么方式?

编辑: 数据库不会加载到内存中,我不确定磁盘上是否有指针。

不,当前实现不可能。

页面 Architecture of SQLite 解释

A separate B-tree is used for each table and index in the database.

其他各个页面都提到了 B 树索引的使用。

Optimizer overview 页面也没有提及直接 "pointer" 索引实现。相反,它只提到根据 SQL 查询的元素选择适当的索引,但所有这些索引仍然是标准的 b 树,需要非常量查找时间。


老实说,我认为这个想法对于 table 来说是个好主意,它被识别为只能通过连续的整数主键访问(很少插入,很少或没有删除),然后直接文件指针可用于访问您描述的数据。