Iphone CoreData提取速度受NSPredicate中参数数量的影响?

Iphone CoreData提取速度受NSPredicate中参数数量的影响?,iphone,objective-c,core-data,Iphone,Objective C,Core Data,我试图找出一种方法来优化我的一些CoreData获取请求。我目前有两个或三个参数可供搜索的NSPredicate。它们都被编入索引 有一个索引可以搜索,还是有几个索引可以搜索?此外,针对int的索引比针对字符串的索引更快吗?当然有帮助的是确保选择区分最早的记录。例如,如果90%的记录处于活动状态,并且同时选择其他记录,则仅选择具有特定键值的两个记录(具有可用索引)要比选择所有活动记录快得多。在这种情况下,最好删除非区分字段上的索引,以确保使用discimining字段上的索引 此外,带有or语句

我试图找出一种方法来优化我的一些CoreData获取请求。我目前有两个或三个参数可供搜索的NSPredicate。它们都被编入索引


有一个索引可以搜索,还是有几个索引可以搜索?此外,针对int的索引比针对字符串的索引更快吗?

当然有帮助的是确保选择区分最早的记录。例如,如果90%的记录处于活动状态,并且同时选择其他记录,则仅选择具有特定键值的两个记录(具有可用索引)要比选择所有活动记录快得多。在这种情况下,最好删除非区分字段上的索引,以确保使用discimining字段上的索引

此外,带有or语句的谓词比没有or语句的谓词要慢得多。 在整数上选择比在字符串上选择快,但如果两者都被索引,差异将很小

选择关键路径而不是关键点也会对性能产生负面影响。 (我最近使用的一个例子是谓词:

product.subgroup.code == %@
从150.000个产品中选择出现故障的正确产品(在0.1秒内),同时:

在大约1.5秒内从150.000个产品中选择正确的产品

在核心数据中,您只能告诉一个属性在数据模型编辑器中被索引。在真实的SQL数据库中,您可以一次对多个属性进行索引。好的,在核心数据中不能使用索引顾问


使用仪器中的真实数据库进行测试(使用仪器获取核心数据)将帮助您找到瓶颈,可能是最适合您的情况。

我有一堆属性标记为索引?那么只有1个属性真正被索引了吗?这可能是我的问题的根源。它们是单独索引的,但优化器只能在每个fetchRequest中使用1个索引
product.subgroup.maingroup.code == %@