首页 > 解决方案 > SQLite 通过 O(1) 而不是 O(log(N)) 的 rowid 选择?

问题描述

我想知道是否可以创建一个 SQLite 数据库,我可以在其中使用 O(1)进行select行。rowid

我开始在我的一个项目中使用 sqlite 数据库,发现从较大的数据库中读取行比从较小的数据库中读取行select花费更长的时间。select我开始在网上搜索并偶然发现了 这篇文章。显然,当select通过 ing时,SQLiterowid不会直接进入 ,而是rowid执行二进制搜索以到达请求的rowid. 这是一个非常合乎逻辑的解决方案,因为我们可以从数据库中删除行,在这种情况下,直接删除是rowid行不通的。但就我而言 - 我有一个“不可变”的数据库,在创建数据库后我没有更改它;因此,所有这些rowid都存在并且顺序正确。

所以我在徘徊是否可以创建一个特殊的数据库或使用一个特定的查询命令,它告诉 SQLite 通过访问rowid没有任何二进制搜索来选择。

如果有其他 SQLite 替代品可以更好地执行我的情况,请告知我(尽管,在我的项目中,我无法将数据库加载到内存中,并且同时访问不同的数据库应该是即时的)

谢谢。

标签: pythondatabasesqlite

解决方案


如果您不需要 SQLite 的全部功能,您可以使用该dbm模块进行简单的哈希算法。它使用散列并且可以比 ISAM 索引执行得更好。但是您将失去排序(在 SQL 等其他功能中......)


推荐阅读