gpt4 book ai didi

iphone - 使用 .@count 谓词进行简单获取需要很长时间(约 30 秒)

转载 作者:行者123 更新时间:2023-12-03 20:24:26 29 4
gpt4 key购买 nike

我有 2 个实体,A 和 B,它们具有多对多关系。

A 实体大约有 10,000 个对象,B 大约有 20 个对象。

基本上,A 对象可以与一个或多个 B 对象相关,并且 B 对象会跟踪它们连接到哪些 A 对象。这是通过逆关系设置完成的。

我只是希望返回与 A 对象无关的每个 B 对象。我使用的获取是这样的:

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setIncludesPropertyValues:NO];
[fetch setEntity:[NSEntityDescription entityForName:@"B" inManagedObjectContext:context]];
[fetch setPredicate:[NSPredicate predicateWithFormat:@"aObjects.@count == 0"]];
return [context executeFetchRequest:fetch error:nil];

但是,如果提取执行需要很长时间,大约。 30秒。我不明白这一点,因为虽然有大量的A对象,但是这次fetch与它们无关,只需检查20个B对象即可。

如果我注释掉谓词,以便获取返回所有 B 对象,那么获取速度非常快,正如您期望的那样,只需获取 20 个对象。因此,该谓词似乎涉及了一些 A 对象,并导致它需要很长时间!

谁能解释一下为什么要花这么长时间吗?

编辑:

我已经获得了 SQL 调试信息,以下是输出内容:

CoreData: sql: SELECT t0.Z_ENT, t0.Z_PK FROM ZTABLEVIEWOBJECT t0 WHERE ((SELECT COUNT(*) FROM ZTABLEVIEWOBJECT t1 JOIN Z_10BOBJECTS t2 ON t1.Z_PK = t2.Z_10AOBJECTS3 JOIN ZTABLEVIEWOBJECT t3 ON t2.Z_12BOBJECTS = t3.Z_PK WHERE (t0.Z_PK = t2.Z_12BOBJECTS) ) = ? AND  t0.Z_ENT = ?) 
CoreData: annotation: sql connection fetch time: 49.4198s
CoreData: annotation: total fetch execution time: 49.4240s for 0 rows.

我应该补充一点,实体 A 和实体 B 都继承(有一个父级)一个公共(public) TableViewObject 实体,该实体保存两者之间的公共(public)值(例如 TableView 部分名称和排序名称等)。希望这有帮助!

最佳答案

你可以替换

aObjects.@count == 0

ANY aObjects == nil

它大大减少了我的查询时间(iPhone OS 3.0)。它也适用于 != nil (@count != 0)。

关于iphone - 使用 .@count 谓词进行简单获取需要很长时间(约 30 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999919/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com