Dim*_*iuc 13 sqlite indexing insert primary-key
我有一个带有表的Sqlite3数据库和一个由两个整数组成的主键,我正在尝试向其中插入大量数据(即大约1GB左右)
我遇到的问题是创建主键也隐式创建了一个索引,在我的情况下,在几次提交之后将插入陷入爬行(这可能是因为数据库文件在NFS上.. 叹息).
所以,我想以某种方式临时禁用该索引.到目前为止,我最好的计划是删除主键的自动索引,但似乎SQLite不喜欢它并且如果我尝试这样做会抛出错误.
我的第二个最佳计划将涉及应用程序在网络驱动器上制作透明的数据库副本,进行修改然后将其合并.请注意,与大多数SQlite/NFS问题相反,我不需要访问并发.
做这样的事情的正确方法是什么?
更新:
我忘了指定我已经使用的标志:
PRAGMA synchronous = OFF
PRAGMA journal_mode = OFF
PRAGMA locking_mode = EXCLUSIVE
PRAGMA temp_store = MEMORY
Run Code Online (Sandbox Code Playgroud)
更新2: 我实际上是批量插入项目,但是每个下一批次的提交都比前一个更慢(我假设这与索引的大小有关).我尝试了10k到50k元组之间的批处理,每个元组是两个整数和一个浮点数.
Mas*_*ash 11
如果你能够合并密钥(我认为你使用32位,而sqlite使用64位,那么它是可能的)并按排序顺序填充数据我打赌你将填写你的第一个Gb,其性能与第二个相同会足够快.
| 归档时间: |
|
| 查看次数: |
8880 次 |
| 最近记录: |