如果我的Author
NSManagedObject
模型具有authorID
属性(由服务器确定),如果NSFetchRequest
过滤NSPredicate
,authorID
的效果会更好{1}}而不是完整的Author
对象?假设我正在通过某个Book
获取所有NSManagedObject
author
个。哪个predicateFormat
更好?
[NSPredicate predicateWithFormat:@"author = %@", anAuthor]
或
[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID]
描述此内容的最佳方式是什么?我的核心数据测试与OCUnit
(SenTestingKit
)一起使用。 iOS有类似Ruby's Benchmark module的内容吗?
答案 0 :(得分:1)
使用-com.apple.CoreData.SQLDebug 1
参数运行您的应用可能值得详细here。
然后,您可以看到Core Data是否在两种情况下都执行相同的SQL(假设您使用的是SQLite存储)。
答案 1 :(得分:0)
第一个(仅使用Author
)可能会更快,但只有测试才会告诉您。
如果您获取(例如Book
)与Author
有关系并且您使用谓词的对象
[NSPredicate predicateWithFormat:@"author = %@", anAuthor]
SQLite可以查看Book
到Author
的合并表是否具有针对给定author
的合适主键。换句话说,谓词变成对Author
实体主键的检查。但是,CoreData仍然需要参考合并表。
如果您使用
[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID]
然后SQLite必须join
合并表与实际的Author
表,然后匹配生成的authorID
列。那将是更多的工作。如果authorID
没有编入索引,它就会崩溃。