2

我在 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 秒,在 Torch 6.0 设备中耗时超过 1 分钟。

子查询

SELECT mfgr_code FROM equipment_groups

正在获取超过 50k 条记录。

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

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

有没有可能更好地提高性能。

4

1 回答 1

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;
于 2012-07-10T22:43:54.463 回答