在Android中需要一个严格的sqlite查询策略

时间:2011-05-03 17:02:23

标签: android sqlite join

我会尽可能地简化。

Table A, an event table, has 4 columns: _id, timestamp, type, source_id
Table B, a source table for a type: _id, a number of other columns unique to B
Table C, a source table for a type: _id, a number of other columns unique to C
Table D, a source table for a type: _id, a number of other columns unique to D

我存储了多达200个这样的事件(现在,可能会进入1000个),它们将是B,C,D类型。加载这些事件时,我需要创建看起来像这样的事件对象

Event {
    id
    timestamp
    type
    source object (can be an object of type B,C,or D, which share a base class)
}

我目前唯一的策略:

  • 拉出所有事件对象
  • 做3个单独的查询(从B中选择*,其中id为(compiled_list_of_ids_of_type_B),c为相同,d为相同)
  • 将来自3个查询的结果存储在3个不同的HashMaps中,以便通过id
  • 轻松访问它们
  • 遍历事件对象并将源对象存储在正确的事件中

我对此并不感到高兴,查询策略似乎非常低效。关于如何更有效地做到这一点的任何想法?

由于

2 个答案:

答案 0 :(得分:0)

您可以减少3个查询:

  • 从A中选择type =“导致B的类型”在B上加入你需要的任何字段
  • 与C
  • 相同
  • 同样为D
  • 当你读取结果时,为每一行构造一个完整的事件对象,并将它们插入你持有最终列表的任何容器中。
    考虑到你不以这种方式存储任何临时存储器,它也可能节省一点内存。虽然不是很多。

    答案 1 :(得分:0)

    添加关联表。

    一 a2other b C d

    查询a和另外

    a2other会告诉你什么表和什么id。

    然后你可以对另一个结果进行排序并单独查询b c和d。