0
및 카테고리 두 개의 핵심 데이터 엔티티를 고려하십시오. 문서에는 다수의 categories
이 포함될 수 있으며 범주에는 많은 수의 documents
(역 관계)이있을 수 있습니다. 또한 문서에는 부울 속성 opened
이 있으며 문서가 열렸 으면 YES
입니다.기준과의 관계를 효율적으로 계산하십시오.
핵심 데이터를 사용하여 주어진 카테고리의 열린 문서를 가장 효율적으로 계산하는 방법은 무엇입니까?
또는 반입 관계를 사용하여이 반입 요청을 최적화 할만큼 충분히 똑똑한 코어 데이터입니까?
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Document"];
fetchRequest.predicate = [NSPredicate
predicateWithFormat:@"opened == YES AND ANY categories.name == %@",
categoryName];
NSError *error = nil;
NSUInteger count = [context countForFetchRequest:fetchRequest error:&error];
편집 :
은 분명히이있다. 위의 가져 오기에 대해 생성 된 SQL :SELECT COUNT(DISTINCT t0.Z_PK)
FROM ZDOCUMENT t0
JOIN Z_3CATEGORIES t1 ON t0.Z_PK = t1.Z_3DOCUMENTS
JOIN ZCATEGORY t2 ON t1.Z_4CATEGORIES = t2.Z_PK
WHERE (t0.ZCD_OPENED = ? AND t2.ZNAME = ?)
감사 문디를. 이 행동이 어딘가에 기록되어 있는지 알고 있습니까? 결국, Core Data가 백그라운드에서하고있는 일은 분명하지 않습니다. – hpique
범주를 가져 와서 노트를 반복하는 것이 내 질문에서 단일 가져 오기보다 훨씬 빠릅니다. 코드를 분리하고 Instruments 비교를 게시 할 수 있습니다. – hpique
결과를 통해 iterating이'countForFetchRequest'보다 빠르다 고 나는 믿지 않는다. 어쩌면 카테고리 이름의 일부 목록을 반복하여 가져 오기를 반복적으로 호출하는 것은 비용이 많이 듭니다. 하지만 그것은 또 다른 질문이 될 것입니다. – Mundi