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 来说是个好主意,它被识别为只能通过连续的整数主键访问(很少插入,很少或没有删除),然后直接文件指针可用于访问您描述的数据。
是否可以在恒定时间 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 来说是个好主意,它被识别为只能通过连续的整数主键访问(很少插入,很少或没有删除),然后直接文件指针可用于访问您描述的数据。