1
我有什麼應該是一個非常簡單的CoreData的設置,看起來像這樣:低效CoreData查詢
Track {
NSSet *artists;
NSSet *genres;
}
Artist {
NSSet *tracks;
}
Genre {
NSSet *tracks;
}
所以這裏的想法是,一個Track
可以有多個Genre
S和Artist
秒。在兩種情況下,都有與Track
相反的關係。
我試圖獲得一個Artist
的列表,其中至少有一個Track
給定Genre
。我使用以下謂詞:[NSPredicate predicateWithFormat:@"ANY tracks in %@", genre.tracks]
。
大部分時間這是快速的,但有時我有Genre
與10k + Tracks
。這會生成一個10k +變量的SQL查詢......這需要很長時間才能運行。
我已經試過各種東西,以避免這種包括:
[NSPredicate predicateWithFormat:@"ANY %@ in tracks", genre.tracks]
[NSPredicate predicateWithFormat:@"SELF IN SUBQUERY(tracks, $t, %@ IN $t.genres)", genre]
[NSPredicate predicateWithFormat:@"(SUBQUERY(tracks, $t, %@ IN $t.genres)[email protected] > 0)", genre];
,可能有一些更多的,我已經忘記了。每個這些編譯,但返回沒有Artist
對象。
我可以做些什麼來改進我開始使用(它工作)的IN查詢的效率?
'(SUBQUERY(tracks,$ t,ANY t.genres =%@)。@ count> 0)「,genre'? – 2013-02-13 03:55:25
我們有一個贏家!!謝謝,我花了幾個小時沒有嘗試特定的組合如果你把它作爲正確答案輸入,我會很樂意將它標記爲答案。 – Tim 2013-02-13 04:50:54