python - 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 替代品可以更好地执行我的情况,请告知我(尽管,在我的项目中,我无法将数据库加载到内存中,并且同时访问不同的数据库应该是即时的)
谢谢。
解决方案
如果您不需要 SQLite 的全部功能,您可以使用该dbm
模块进行简单的哈希算法。它使用散列并且可以比 ISAM 索引执行得更好。但是您将失去排序(在 SQL 等其他功能中......)
推荐阅读
- reactjs - 我正在调用 Firestore 代码的动作创建者
- java - 如何使用 Java 中的 Firestore 中的数据创建饼图
- javascript - 如何将一个脚本的输出传递到 javascript 中的弹出 url?
- python - 将本地计算机时钟与 NTP 时间同步
- python - 如何强制 python matplotlib 到轴进行线性缩放?
- javascript - 我想将一些代码从代码笔切换到 Visual Studio 代码
- networking - 计算与链接节点的交互 [netlogo]
- java - 如何判断一个反应是否被使用 JDA 的不和谐机器人删除?
- image-processing - 未考虑 Thumbor focus() 过滤器
- mysql - Mysql 计算 Sum(if()) 中的不同 ID