This week I’m gonna throw three strategies you can use to improve the performance of your NSPredicates — either in Core Data or while filtering a collection like
If things are really slow though, there are probably other places where you should be focusing, but let’s assume you have already done that. ;)
The convenience of throwing a star wildcard (*) to look for a prefix, suffix or substring can make your predicates slower. Instead of using
title LIKE "The *" use
title BEGINSWITH "The"
term LIKE *someSuffix" use
term ENDSWITH "someSuffix"
If you are looking for the occurrence of a substring within a string, don’t use
term MATCHES '*anything*', there is a super cool keyword exactly for that:
term CONTAINS "anything"
Cheap Computations First
Unlike you, your iPhone’s little brain is faster crunching math than processing text.
Perform the operations with numbers first (this includes
NSDate) and leave the
NSString comparisons at the end of the predicate.
Discard largest groups first
Place the comparisons that will eliminate the largest group of data at the beginning of the predicate. This leaves a smaller number of objects for the next comparisons (which should be the most expensive comparisons).