0
考慮兩個核心數據實體:文檔和類別。一個文檔可以有很多categories
,而一個類別可以有很多documents
(反比關係)。此外,如果文檔已被打開,則文檔具有布爾屬性opened
,即YES
。與標準有效地計算關係
使用核心數據,計算給定類別的打開文檔的最有效方法是什麼?
或者是Core Data足夠聰明地使用反向關係來優化這個獲取請求?
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
原來,獲取類別和迭代它的筆記比我的問題中的單個獲取快得多。如果我能,我會隔離代碼併發布儀器比較。 – hpique
我不相信遍歷結果比'countForFetchRequest'快。也許你正在迭代一些類別名稱列表並反覆調用獲取 - 這可能會很昂貴。但那會是另一個問題。 – Mundi