2

在我的项目中,我有 5 个表:Category、CategoryHasProduct、Product、StoreHasProduct 和 Store。我在那里存储我的所有产品,它们属于哪些类别以及哪些产品在哪个商店可用。

现在,我想知道所有类别中有多少产品可用,具体取决于选择的商店。出于性能原因,我想为此使用 SQL 查询。查询是

SELECT 
    count(*), 
    cp.category_id 
FROM 
    categoryhasproduct cp, 
    product p, 
    storehasproduct sp 
WHERE 
    p.sku = cp.product_id AND 
    sp.product_id = p.sku AND 
    sp.store_id = 2 AND 
    sp.isActive = 1  
GROUP BY cp.category_id

在项目中,我使用 ORMLite。但要查询这个,我做了一个基本的 db-query

String query = "...";
SQLiteDatabase db = DBConnector.getConnector(context).getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);

现在我有一个问题,这对我来说毫无意义。在 Android 4.0.3 上,一切正常。查询大约需要 0.5 秒才能运行,我可以继续。但是当我尝试在 Android 2.3.3 上执行查询时,查询本身似乎陷入了无限循环。即使过了 20 分钟,查询也没有完成。在真实设备上,设备的处理器变得非常热,因此它会自行关闭。

当我对查询进行了一些尝试时,似乎对于 2.3.3 设备上的 sqlite 来说它太大了。与最后一个 storehaseproduct-table 的连接似乎将查询放大了很多。我还尝试了其他语句,例如嵌套查询或连接,但似乎它们也有同样的问题。

有没有其他人观察过 sqlite 的这种奇怪行为?还有一个更重要的问题:我该怎么做才能使这个查询在运行时间几乎相等的 Android 2.3.3 上运行?

4

0 回答 0