索引是一种用来在某中条件下加速查询的结构。考虑如下查询:
1 | SELECT * FROM FOODS WHERE NAME='苹果'; |
当数据库搜索匹配的行时,执行这种查询的默认方法是调用顺序扫描。也就是说,逐个搜索(扫描)表中的所有行,查看 NAME 属性是否匹配 “苹果”。
但是,如果频繁使用这种查询,并且表 FOODS 非常大,使用索引的方法查找数据就更有意义了。与其他许多数据库类似,SQLite 使用 B-tree 做索引。
索引也会增加数据库的大小。从字面上理解,它们复制了一份索引的字段。如果表中的所有字段都创建索引,表的大小可能翻倍。另一个要考虑的情况是索引的维护。进行 insert、update 和 delete 操作时,除了修改表,数据库也必须修改对应的索引。虽然索引可以加速查询,但是它们可能降低 insert、update 和类似操作的速度。创建索引的命令如下:
1 | create index [unique] index_name on table_name (columns) |