2014-02-17 3 views
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 = ?) 

답변

0

코드가 우수합니다. 핵심 데이터에서이 가져 오기를 수행하는 것이 가장 효율적인 방법이라고 생각합니다.

나는 @"opened == YES"이 작동
하지만 @"opened == 1" 또는 @"opened == OK %@", @YES가 확실히 작동합니다 같아요.

(당신은 간결함을 좋아한다면, 당신은 ===을 대체 할 수 있습니다.)

+0

감사 문디를. 이 행동이 어딘가에 기록되어 있는지 알고 있습니까? 결국, Core Data가 백그라운드에서하고있는 일은 분명하지 않습니다. – hpique

+0

범주를 가져 와서 노트를 반복하는 것이 내 질문에서 단일 가져 오기보다 훨씬 빠릅니다. 코드를 분리하고 Instruments 비교를 게시 할 수 있습니다. – hpique

+0

결과를 통해 iterating이'countForFetchRequest'보다 빠르다 고 나는 믿지 않는다. 어쩌면 카테고리 이름의 일부 목록을 반복하여 가져 오기를 반복적으로 호출하는 것은 비용이 많이 듭니다. 하지만 그것은 또 다른 질문이 될 것입니다. – Mundi

관련 문제