在黑莓中从sqlite获取数据非常慢

时间:2012-07-10 14:15:17

标签: database performance blackberry sqlite

我在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秒。所以在这里我得出结论,循环的性能是影响获取整个数据的总响应时间的因素。

除了循环游标之外,还有其他任何方法来获取数据。

是否有可能更好地改善性能。

1 个答案:

答案 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;