Rendimiento de sum de CoreData

Tengo alguna pregunta teórica para preguntar sobre los datos básicos y la function de sum .

Intento sumr valores de la tabla de datos básicos con tres forms.

  1. Captura todo y utiliza la expresión para resumirlo:

    NSArray * array1 = [self getAll:self.managedObjectContext]; int sum = [[array1 valueForKeyPath:@"@sum.sum"] intValue]; 
  2. get todo y usar para loop:

     int sum2 = 0; NSArray * array2 = [self getAll:self.managedObjectContext]; for (Test * t in array2) { sum2 = sum2 + [t.sum intValue]; } 
  3. deja que Core Data lo sume.

     NSArray * array = [self getAllGroupe:self.managedObjectContext]; NSDictionary * i = [array objectAtIndex:0]; id j = [i objectForKey:@"sum"]; (NSArray *)getAllGroupe:(NSManagedObjectContext*)Context{ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:Context]; NSExpressionDescription* ex = [[NSExpressionDescription alloc] init]; [ex setExpression:[NSExpression expressionWithFormat:@"@sum.sum"]]; [ex setExpressionResultType:NSDecimalAttributeType]; [ex setName:@"sum"]; [fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:ex, nil]]; [fetchRequest setResultType:NSDictionaryResultType ]; NSError *error; [fetchRequest setEntity:entity]; NSArray *fetchedObjects = [Context executeFetchRequest:fetchRequest error:&error]; return fetchedObjects; } 

sorprendentemente el

  1. El path fue el más lento ( for 1.000.000 data --> 19.2 s ), el
  2. fue más rápido ( for 1.000.000 data --> 3.54 s ) y el
  3. El path fue el más rápido ( for 1.000.000 data --> 0.3 s )

¿Por qué es esto?

Si entiendo bien, incluso los datos centrales deben pasar por todos los 1.000.000 datos y sumrlo. ¿Esto es porque usa más núcleos si hay disponibles?

Ningún CoreData no hace la sum por sí mismo, sino que delega en su database sqllite de respaldo que está optimizada para cosas como esa. Básicamente CoreData envía un select SUM(sum) from table; a su database y se realiza allí.