SQLite表的主键是否需要手动创建显式索引?
SQLite主键索引创建规则说明
单列integer类型主键的索引处理
- 完全不需要手动创建显式索引。SQLite默认会为所有定义了主键的列自动创建唯一索引,用来保证主键的唯一性约束,同时加速主键相关的查询。
- 单列integer类型主键还有特殊优化:该列会自动成为SQLite内置
ROWID的别名,底层存储查询效率比普通索引更高,不需要做任何额外的索引配置。 - 你可以执行
PRAGMA index_list(你的表名);查询指定表的索引列表,就能看到SQLite自动生成的主键索引条目。
单列string/text类型主键的索引处理
结论和integer类型主键完全一致,不需要手动创建索引:
- 只要是被声明为
PRIMARY KEY的列,无论数据类型是integer、text还是其他合法的SQLite数据类型,SQLite都会自动生成对应的唯一索引,不需要用户额外操作。 - 唯一区别是text类型主键不会成为
ROWID的别名,没有对应的内置优化,但自动创建索引的逻辑没有差异。
额外提示:如果手动给主键重复创建索引,只会生成冗余索引,额外占用存储空间,还会拖慢数据插入、更新、删除的性能,完全没必要。
内容的提问来源于stack exchange,提问作者Boppity Bop
相关产品推荐
相关产品推荐

