SQLite索引构建:告别查询卡顿,让你的SQL语句更加高效

本文详细探讨了SQLite数据库中索引的构建与优化,包括ROWID的作用、避免双重索引、为何不使用Hash索引、如何建立复合索引以及何时删除不必要的索引。通过实例解析了查询优化器的工作原理,并介绍了如何利用Statistics进行性能调整。正确使用索引能有效提升查询速度,减少资源消耗。
摘要由CSDN通过智能技术生成

首先我们要知道SQLite的索引特点

它会给每一个记录自动添加ROWID 字段,并建立B+树

如果指明integer类型的数据是primary key, 那么这个attribute实际是ROWID的别名

对于不是Integer类型的主键,建立B-树

为什么会增加ROWID

  1. 数据库内部可以使用这个字段索引记录,这很高效。
  2. 数据库设计的时候,往往需要自增的ROWID,SQLite帮我们提前实现了。

考虑下面表

create table T(
  word text primary key,
  cnt integer
);

我们对上边的表进行查询

select * from T where word='JAVA'
  1. 首先,如果使用B-树找到word='JAVA’的rowid
  2. 使用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可以同时搜索两个列。

删除不必要的索引

删除不必要

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值