我有一个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"
答案 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);");