Первый (с использованием только Author
), вероятно, будет быстрее, но только тестирование скажет вам наверняка.
Если вы выбираете (например, Book
) объекты, которые имеют отношение к Author
и вы используете предикат
[NSPredicate predicateWithFormat:@"author = %@", anAuthor]
SQLite может видеть, есть ли у таблицы слияния от Book
до Author
правильный первичный ключ для данного author
.Другими словами, предикат превращается в проверку первичного ключа сущностей Author
.CoreData все еще должен обращаться к таблице слияния.
Если вы используете
[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID]
, тогда SQLite придется join
таблицу слияния с фактической таблицей Author
и затем сопоставлятьрезультирующий столбец authorID
.Это было бы больше работы.И он сломался бы, если authorID
не проиндексирован.