Android SQLite索引在创建索引时的性能

Android SQLite索引在创建索引时的性能,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我以如下方式创建了一个SQLite表: CREATE TABLE ex2(_ID INTEGER PRIMARY KEY AUTOINCREMENT,x REAL,y REAL,z TEXT); 我对此表的查询将始终为: SELECT z FROM ex2 WHERE x BETWEEN 1.5 AND 100.5 AND y BETWEEN 10.2 AND 65.3; 我的查询要求结果满足x和y列值的范围约束(真实数据类型)。另外,为了澄清,1.5100.5、10.2和65.3不是固

我以如下方式创建了一个SQLite表:

  CREATE TABLE ex2(_ID INTEGER PRIMARY KEY AUTOINCREMENT,x REAL,y REAL,z TEXT);
我对此表的查询将始终为:

SELECT z FROM ex2 WHERE x BETWEEN 1.5 AND 100.5 AND y BETWEEN 10.2 AND 65.3;
我的查询要求结果满足x和y列值的范围约束(真实数据类型)。另外,为了澄清,1.5100.5、10.2和65.3不是固定的。仅举例说明一个示例查询

x和y列的值肯定不是唯一的

创建索引的最佳方法是什么?我的选择(以及目前为止的测试):

选项1:

  CREATE INDEX ex2i1 ON ex2(x);
  CREATE INDEX ex2i2 ON ex2(y);
  CREATE INDEX ex2i12 ON ex2(x,y);
选项2:

  CREATE INDEX ex2i1 ON ex2(x);
  CREATE INDEX ex2i2 ON ex2(y);
  CREATE INDEX ex2i12 ON ex2(x,y);
我在我的Android测试设备上做了一些(粗略的)性能测试,但似乎找不到具体的证据证明哪个索引实际上更好。

选项2(即综合索引)总体上应该更好。我认为这是一篇关于这个话题的好文章。 更新
这也是一个好帖子
顺便说一句,要想看到差异,你必须用随机值创建一个非常大的表(我会说不少于10000条记录),并选择x和y的几个范围

使用检查正在使用的索引。不管怎么说,多维范围查询最好使用。不幸的是,R-tree模块看起来并没有包含在标准的Android构建中。如果真的有必要,我可能会朝那个方向走。