首页 > 解决方案 > 如何在android中为sqlite查询引入索引?

问题描述

在我的 android 应用程序中,我使用Cursor c = db.rawQuery(query, null);从本地 sqlite 数据库中查询数据,其中一个query字符串如下所示:

SELECT t1.* FROM table t1
WHERE NOT EXISTS (
  SELECT 1 FROM table t2
  WHERE t2.start_time = t1.start_time AND t2.stop_time > t1.stop_time
)

但是,问题是当数据库变大时查询会变得非常慢。试图考虑引入indexing以加快查询速度,但到目前为止,还不是很成功,因此,在这里获得一些帮助会很棒,因为对于 android 应用程序也很难找到这方面的示例。

标签: sqliteindexingandroid-sqlite

解决方案


start_time您可以为列和创建复合索引stop_time

CREATE INDEX idx_name ON table_name(start_time, stop_time);

您可以阅读SQLite 查询优化器概述

内部连接的 ON 和 USING 子句在 WHERE 子句分析之前转换为 WHERE 子句的附加术语...

和:

如果使用如下语句创建索引:

CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z);

然后,如果索引的初始列(列 a、b 等)出现在 WHERE 子句术语中,则可以使用该索引。索引的初始列必须与 = 或 IN 或 IS 运算符一起使用。 使用的最右边的列可以使用不等式。

您可能必须从设备上卸载应用程序,以便删除数据库并重新运行以重新创建它,或者增加数据库的版本号以便您可以在onUpgrade()方法中创建索引。


推荐阅读