列索引没有改进select语句(Android)

时间:2016-08-29 15:06:14

标签: android performance sqlite indexing

我有一个250万行的数据库表。我通过一列(item_no)或两列(item_no& subitem_no)查询此表。为了优化我的查询,我创建了两个索引。一个用于item_no,一个用于item_no和subitem_no。

示例:

end()

现在,当我在SQLite浏览器中运行此查询时:

CREATE INDEX Idx2 ON master(item_no);
CREATE INDEX Idx3 ON master(item_no, subitem_no);

或者这个:

SELECT component, hours, unit, price
FROM master
WHERE barcode = "234567"
AND item_no = "1234"

执行速度极快。大约76ms - 186ms。这就是我想要的,没有索引的原始select语句介于4000 - 6000ms之间。所以我正在寻找的巨大改进。所以现在我将数据库加载到我的Android设备(三星Galaxy S6)并给它相同的索引。查询速度没有提高......根本没有,select语句仍然需要4000 - 6000ms才能运行。

以下是我的表现方式。如果您发现任何错误,请告诉我,或者您可以解释为什么我没有看到预期的性能提升。

SELECT component, hours, unit, price
FROM master
WHERE barcode = "234567"
AND item_no = "1234"
AND subitem_no = "34"

1 个答案:

答案 0 :(得分:1)

一定是数据缓存问题。我重新启动了设备,卸载了我的应用程序,然后根据@Rotwang的评论更新了我的索引。现在,当我运行我的应用程序时,我得到了我想要的3ms查询时间。

以下是我的修正:

db.execSQL("CREATE INDEX Idx2 ON master(barcode, item_no, subitem_no);");
db.execSQL("CREATE INDEX Idx3 ON master(barcode, item_no);");