Skip navigation.
 
mlCoreData fetch is way too slow
FROM : James Hober
DATE : Tue Feb 05 20:31:22 2008

I have a CoreData app that has a SQLite store holding 157,273 managed 
objects.  Each managed object has 2 attributes, input and answer, 
which are NSStrings and that's all.  No other attributes.  No 
relationships.  No fetched properties.

A simple fetch for a single managed object takes 7 seconds!

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K 
like %@",
        @"input", input]; //assume NSString *input exists
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] 
autorelease];
    NSEntityDescription *entity = [NSEntityDescription 
entityForName:@"MyEntity"
                                              inManagedObjectContext:
[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    [fetchRequest setPredicate:predicate];
    [fetchRequest setFetchLimit:1];
    NSError *error = nil;

    //The following line takes 7 seconds to execute:
    NSArray *results = [[self managedObjectContext] 
executeFetchRequest:fetchRequest error:&error];

    if ([results count]) {return [[results objectAtIndex:0] 
valueForKey:@"answer"];}
    return @"";

How can I speed this up?

The 157,273 inputs are unique.  I believe CoreData searches them 
linearly in no particular order, instead of sorting them so they can 
be binary searched in the store.  Is this aspect of CoreData opaque? 
Is there no way to get CoreData to efficiently search on a unique 
string attribute?

If my experiments with CoreData continue to prove unfruitful, I may 
remain with my current implementation which uses Objective-C++  and 
an STL map.  I can load all the data into the map in about 3.6 
seconds and then retrieval from memory is near instantaneous.

Thank you for any help speeding up this CoreData implementation or 
any other suggestions.

Related mailsAuthorDate
mlCoreData fetch is way too slow James Hober Feb 5, 20:31
mlRe: CoreData fetch is way too slow Mike Glass Feb 5, 20:44
mlRe: CoreData fetch is way too slow Phil Feb 5, 20:52
mlRe: CoreData fetch is way too slow Bill Dudney Feb 5, 20:58
mlre: CoreData fetch is way too slow Ben Trumbull Feb 6, 01:07
mlRe: CoreData fetch is way too slow James Hober Feb 6, 19:24