代码之家  ›  专栏  ›  技术社区  ›  Dimitri Tcaciuc

Sqlite3:插入时禁用主键索引?

  •  15
  • Dimitri Tcaciuc  · 技术社区  · 17 年前

    我有一个Sqlite3数据库,它有一个表和一个由两个整数组成的主键,我试图向其中插入大量数据(即大约1GB左右)

    我遇到的问题是,创建主键也会隐式地创建一个索引,在我的例子中,在几次提交后,这会使插入陷入爬行状态(这是因为数据库文件在NFS上。。 ).

    所以,我想暂时禁用该索引。到目前为止,我最好的计划是删除主键的自动索引,但SQLite似乎不喜欢它,如果我尝试这样做,就会抛出错误。

    我忘了指定我已经使用的标志:

    PRAGMA synchronous = OFF
    PRAGMA journal_mode = OFF
    PRAGMA locking_mode = EXCLUSIVE
    PRAGMA temp_store = MEMORY
    

    更新2:

    3 回复  |  直到 17 年前
        1
  •  11
  •   Mash    17 年前
    1. 您无法删除嵌入式索引,因为它是行的唯一地址。
    2. 重复使用命令,不要每次从字符串创建命令
    3. 将页面缓存大小设置为您剩余的内存量(请记住,缓存大小是以页数为单位,而不是以字节数为单位)
    4. 提交每50000个项目。

    如果你能够合并密钥(我认为你使用的是32位,而sqlite使用的是64位,所以这是可能的)并按排序顺序填充数据,我打赌你会以与第二个相同的性能填充第一个Gb,而且两者都足够快。

        2
  •  6
  •   David Webb    17 年前

    INSERT

    BEGIN TRANSACTION 插入

        3
  •  3
  •   Community Mohan Dere    9 年前