ios - 核心数据获取速度慢

标签 ios core-data nsfetchrequest

我正在从大型数据库中检索一系列对象。每次查找有 1-20 个结果。使用获取请求如下:

NSPredicate *indexPredicate = [NSPredicate predicateWithFormat:
                          @"index == %@",indexNumber];

我可以在相对较短的时间内得到结果。

CoreData: annotation: total fetch execution time: 0.0623s for 9 rows.

但是,当将所有谓词与 [NSCompoundPredicate orPredicateWithSubpredicates: 合并以在一个操作中进行获取时,速度会下降。

CoreData: annotation: total fetch execution time: 0.3890s for 195 rows.

我尝试过索引、设置提取和批量限制,但无法减少总提取时间。我还尝试使用 GDC 同时一一执行获取请求,但在设置时遇到问题。如何减少获取这些数据的时间?

最佳答案

将 20 个索引查找与 OR 结合起来会在获取过程中进行大量比较。您可以通过将索引值收集到数组中然后使用与 IN 进行单次比较来改善问题。类似的东西

NSArray *indexesToFetch = // A bunch of NSNumbers with index numbers of interest
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"indexNumber in %@", indexesToFetch];

如果您有大量数据需要搜索,这仍然是一项艰巨的工作。但是使用 IN 来完成类似的事情通常比使用一大堆 OR 快得多。

关于ios - 核心数据获取速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253567/

相关文章:

ios - 在不要求用户登录的情况下检索 youtube 播放列表

ios - _PFFaultHandlerLookupRow 保存子上下文时崩溃

ios - Core Data + CloudKit 无法在其他设备上自动刷新?

ios - 处理核心数据保存错误的正确方法

objective-c - 如何根据另一个实体的一对多关系访问 CoreData 实体?

ios - 如何对 subview 进行分组以实现自动化?

ios - 使用 openssl/x509.h 解析证书

ios - iOS:executeFetchRequest:错误:提取请求必须具有一个实体

iOS Swift Core Data 如何从 NSFetchedResultsController 中搜索 FetchedObjects

ios - 错误的YouTube Google身份验证