我在sdcard中有168mb sqlite数据库,包含近30个表,每个表有1000多条记录。我正在使用此查询从数据库中获取结果。
select code mfr_code, name mfr_name
from manufacturers
where mfgr_type_code < 5 and code in (
select mfgr_code
from equipment_groups
)
此查询在曲线5.0中花费超过30秒,在火炬6.0设备中花费超过1分钟。
子查询
SELECT mfgr_code FROM equipment_groups
正在获取超过50,000条记录。
同样的查询在android中测试时花费的时间少于5秒。黑莓有什么问题。
有没有其他方法可以缩短处理时间。
修改
我正在使用此代码从数据库中获取结果
Vector vehical_type = new vector()
Cursor cursor = statement.getCursor();
while (cursor.next()) {
Row row = cursor.getRow();
vehical_type.addElement(row.getString(0));
}
cursor.next()第一次执行时,使用IN查询的次数超过10次。 并且循环占用剩余的20秒来完成。
所以我使用EXISTS查询,如下所示。性能得到了很大改善。
但是我观察到的是同样的cursor.next()第一次花费1秒,完成循环需要将近10秒。所以在这里我得出结论,循环的性能是影响获取整个数据的总响应时间的因素。
除了循环游标之外,还有其他任何方法来获取数据。
是否有可能更好地改善性能。
答案 0 :(得分:1)
您是否尝试过重写查询?这里有一些想法:
如果equipment_groups.mfgr_code
列不唯一:
SELECT code mfr_code, name mfr_name
FROM manufacturers
WHERE mfgr_type_code < 5
AND EXISTS (
SELECT 1
FROM equipment_groups
WHERE mfgr_code = code
);
如果它是唯一的:
SELECT code mfr_code, name mfr_name
FROM manufacturers
LEFT JOIN equipment_groups ON mfgr_code = code
WHERE mfgr_type_code < 5;