我试图从中提取数据的数据库有大约50,000个文档。目前,iOS或Android设备在视图中查询并向移动设备显示数据大约需要90秒。我的代码发布在下面。有什么我可以采取不同的方式来加快速度吗?感谢您的任何提示。
function updateAllPoliciesTable() {
try {
var db = Alloy.Globals.dbPolicyInquiry;
var view = db.getView("AllRecordsByInsured");
var vec = view.getAllEntriesBySQL("Agent like ? OR MasterAgent like ?", [Ti.App.agentNumber, Ti.App.agentNumber], true);
var ve = vec.getFirstEntry();
var data = [];
while (ve) {
var unid = ve.getColumnValue("id");
var row = Ti.UI.createTableViewRow({
unid : unid,
height: '45dp',
rowData: ve.getColumnValue("Insured") + " " + ve.getColumnValue("PolicyNumber")
});
var viewLabel = Ti.UI.createLabel({
color : '#333',
font : {
fontSize : '16dp'
},
text: toTitleCase(ve.getColumnValue("Insured")) + " " + ve.getColumnValue("PolicyNumber"),
left: '10dp'
});
row.add(viewLabel);
data.push(row);
ve = vec.getNextEntry();
}
//Ti.API.log("# of policies= " + data.length);
if(data.length == 0) {
var row = Ti.UI.createTableViewRow({
title : "No policies found"
});
data.push(row);
}
$.AllPoliciesTable.setData(data);
Alloy.Globals.refreshAllPolicies = false;
Alloy.Globals.loading.hide();
} catch (e) {
DTG.exception("updateAllPoliciesTable -> ", e);
}
}
答案 0 :(得分:1)
嗯,与大数据库引擎不同,SQLite数据库引擎更受限制,它运行的设备也是如此。
我要做的是检查提取数据的查询 - 您是否在表中使用索引?你用它们来查询吗?是否有不必要的连接或拉动?
我没有推文询问您应该考虑查看移动noSQL解决方案 - 我知道appcelerator市场上有一些 - 检查它是否适合您的需求以及是否加快了速度。
答案 1 :(得分:1)
在适当的表上创建一个索引,这应该可以加快速度。 您的视图的SQLite表应命名为“view_AllRecordsByInsured”。 为该表创建索引,查看有关“CREATE INDEX”的SQLite文档以获取更多详细信息。
要执行适当的SQL,您可以使用DTGDatabase类,如
var sqldb = new DTGDatabase(Alloy.Globals.dbPolicyInquiry.localdbname);
sqldb.execute("CREATE INDEX IF NOT EXISTS ON view_AllRecordsByInsured (Agent,MasterAgent)")
如果确实提供了足够的速度,请查看SQLite dbs的全文搜索。 下面是一些关于全文索引的示例代码,为您提供一个起点:
CREATE VIRTUAL TABLE ft_view__mobile_companies_ USING fts4(id, customername, customercity)
INSERT INTO ft_view__mobile_companies_(id, customername, customercity) SELECT id, customername, customercity FROM view__mobile_companies_
要查询索引,需要使用MATCH运算符执行SQL(请参阅SQLite文档)。在一个应用程序中,我从Domino视图同步了超过100.000个数据集,并且在SQLite中使用全文搜索进行搜索立即工作。