首先我们要知道SQLite的索引特点
它会给每一个记录自动添加ROWID 字段,并建立B+树
如果指明integer类型的数据是primary key, 那么这个attribute实际是ROWID的别名
对于不是Integer类型的主键,建立B-树
为什么会增加ROWID
- 数据库内部可以使用这个字段索引记录,这很高效。
- 数据库设计的时候,往往需要自增的ROWID,SQLite帮我们提前实现了。
考虑下面表
create table T(
word text primary key,
cnt integer
);
我们对上边的表进行查询
select * from T where word='JAVA'
- 首先,如果使用B-树找到word='JAVA’的rowid
- 使用rowid 找打记录
避免双重索引
当然我们可以避免使用上边双重索引。
create table wordcount(
word text primary key,
cnt integer
) without ROWID;
这样,SQLite只会为word建立B树索引。但是这样只有记录很少的时候才会有益处,一般我们不会这么做。
为什么不使用hash索引
选择正确的索引非常重要,可以显著提高查询性能。在SQLite中,有三种类型的索引可供选择:B树、B+树和Hash索引。
B树和B+树适用于范围查询和顺序访问。在SQLite中,主键总是使用B+树索引,而其他索引可以使用B树或B+树。
Hash索引适用于等值查询,但不支持范围查询。在SQLite中,Hash索引不常用,因为B树和B+树已经能够很好地满足需求
建立复合索引
在SQLite中,建立复合索引可以显著提高查询性能。复合索引可以覆盖多个列,从而使查询更加高效。
例如,如果有一个包含“FirstName”和“LastName”列的表,并且经常按照这两个列进行查询,那么建立复合索引就非常有用。这可以减少查询所需的时间,因为SQLite可以同时搜索两个列。
删除不必要的索引
删除不必要