SQLITE 和自动索引

Posted

技术标签:

【中文标题】SQLITE 和自动索引【英文标题】:SQLITE and autoindexing 【发布时间】:2013-01-13 11:58:03 【问题描述】:

我最近开始探索 sqlite 中的索引。我能够成功创建包含所需列的索引。

完成此操作后,我查看了数据库,发现索引已成功创建,结果发现 sqlite 已经为我的每个表自动创建了索引: “sqlite_autoindex_tablename_1”

这些自动生成的索引使用了每个表的两列,这两列构成了我的复合主键。这只是sqlite在使用复合主键时做的正常事情吗?

由于我将根据这两列进行大部分查询,因此手动创建完全相同的索引是否有意义?

索引新手,非常感谢任何支持/反馈/提示等 - 谢谢!

【问题讨论】:

【参考方案1】:

SQLite 需要一个索引来强制执行 PRIMARY KEY 约束——如果没有索引,强制约束会随着表大小的增长而显着减慢。约束和索引不相同,但我不知道有任何关系数据库不会自动创建索引来强制执行主键。所以是的,这是任何关系数据库的正常行为。

如果创建索引的目的是优化搜索,其中您有一个涉及索引中第一列的可索引搜索词,那么没有理由在列上创建额外的索引(s ) -- SQLite 将使用自动创建的。

如果您的搜索将涉及索引中的 second 列而不包括第一列的可索引词,则您需要创建索引。当搜索中未指定索引的头列时,SQLite(或我所知道的任何其他关系数据库)都不能使用复合索引来优化过滤。

【讨论】:

谢谢拉里 - 正是我想要的:)

以上是关于SQLITE 和自动索引的主要内容,如果未能解决你的问题,请参考以下文章

SQLite):删除行后自动更新两个表中的索引

SQLite 中的主键是不是需要索引?

SQLite 中的主键是不是需要索引?

SQLite 数据库在 <table_name>(column) 上给出警告自动索引升级 Android L 后

sqlite:唯一覆盖索引

使用 rtree 和普通索引的 SQLite 查询很慢