【问题标题】:Dropping a SQLite database index and then adding it back on删除 SQLite 数据库索引,然后重新添加
【发布时间】:2011-03-02 02:22:40
【问题描述】:

我正在向 Android 上的 SQLite 数据库中插入大量记录。为了缩短插入时间,我正在考虑在完全添加数据后在表上创建索引。

我的问题是,数据库实际上在什么时候根据表上的值构建索引?是在我发出 SQL 语句 (create index index_name on table ...) 后立即发生,还是数据库可以推迟到第一个查询到达?

谢谢, 兰吉特

【问题讨论】:

  • 您可以在现有的完全填充的表的顶部创建索引(或多个)。但是,我强烈建议您考虑您的用例,然后仔细选择索引列的顺序,然后相应地创建索引(或多个索引)。您也可以通过实验找到最佳值。仅通过巧妙地选择索引,我的性能差异就达到了一个数量级......

标签: sqlite insert indexing


【解决方案1】:

它会在您发出create index 命令时立即创建索引。相关代码在sqlite3CreateIndex 中,这将创建索引并将其写入磁盘(除了作为数据库打开操作的一部分调用但用户创建索引时不是这种情况的特殊情况)。

【讨论】:

  • 感谢您的回复 paxdiablo。我不是在处理我正在使用的数据中的唯一约束。另外,我打算在插入最后一行后立即创建索引,这样查询会很快。推迟索引创建的目的是加速单个插入,而不是通过让数据库索引在插入的同时具有单个特征来减慢它们。再次感谢!
  • @Ranjit,我可能误解了你,并假设你打算将索引创建推迟到create index 之后的某个时间,而不是仅仅询问它是否可以 发生。如果是后者,不,SQLite 创建索引作为create index 调用的一部分,它不会延迟。鉴于此,我可以从我的答案中删除很多多余的内容。
  • 但是可以独立于表创建索引。因此,可以稍后为预先填充的表建立索引。我想这就是他要问的。至少我是怎么理解的。
  • @STATUS:是的,它可以,但我认为 OP 知道这一点,因为“我正在考虑在完全添加数据后在表上创建索引”。问题更多与发出create index 和索引创建开始之间可能存在的延迟有关:“它是在我发出SQL 语句(create index index_name on table ...)后立即发生,还是数据库可以推迟到第一个查询到达?”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多