首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >核心数据性能: NSPredicate比较对象

核心数据性能: NSPredicate比较对象
EN

Stack Overflow用户
提问于 2011-12-23 07:00:01
回答 2查看 4K关注 0票数 8

如果我的Author NSManagedObject模型有一个authorID属性(由服务器决定),那么如果NSFetchRequest按照authorID而不是完整的Author对象进行过滤,NSPredicate的性能会更好吗?假设我正在通过某个author获取所有的Book NSManagedObject。哪种predicateFormat更好?

代码语言:javascript
运行
复制
[NSPredicate predicateWithFormat:@"author = %@", anAuthor]

代码语言:javascript
运行
复制
[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID]

描述这个的最好方法是什么?我使用OCUnit (SenTestingKit)进行核心数据测试。iOS有像Ruby's Benchmark module这样的东西吗?

EN

回答 2

Stack Overflow用户

发布于 2011-12-23 07:32:37

作为详细的here,使用-com.apple.CoreData.SQLDebug 1参数运行您的应用程序可能是值得的。

然后,您可以查看Core Data在这两种情况下是否执行相同的SQL (假设您使用的是SQLite存储)。

票数 1
EN

Stack Overflow用户

发布于 2011-12-23 22:42:32

第一种方法(只使用Author)可能会更快,但只有测试才能确定。

如果您获取(例如Book)与Author有关系的对象,并且您使用谓词

代码语言:javascript
运行
复制
[NSPredicate predicateWithFormat:@"author = %@", anAuthor]

SQLite可以查看从BookAuthor的合并表是否具有该给定author的正确主键。换句话说,谓词变成了对Author实体主键的检查。尽管如此,CoreData仍然需要查询合并表。

如果您使用

代码语言:javascript
运行
复制
[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID]

然后,SQLite必须将合并表与实际的Author表进行join,然后匹配得到的authorID列。这将是更多的工作。如果authorID没有索引,它就会崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8610687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档