2012-02-21 65 views
1

我想找出一种方法来优化我的一些CoreData提取请求。我目前有NSPredicates有2或3个参数进行搜索。它们都被索引。CoreData获取速度受NSPredicate中参数数量的影响?

是更快有一个单一的索引,我可以搜索或几个我可以搜索?也是指数针对int的速度比表示一个字符串的索引?

回答

2

确实有帮助的是确保选择最先区分的记录。例如,如果只选择两个具有某个键值的记录,如果90%的记录处于活动状态并且同时选择其他内容,则选择所有活动记录的速度会更快(使用索引可用)。在这种情况下,您应该更好地删除非歧视字段上的索引,以确保使用废除字段上的索引。

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

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

product.subgroup.code == %@ 

选择来自150.000产品中的毛刺是正确的(0.1秒内),而:

product.subgroup.maingroup.code == %@ 

选择来自150.000产品是正确的中大约1.5秒

在核心数据中,你只能告诉一个属性在数据模型编辑器中被编入索引,在真正的SQL数据库中,你可以一次索引多个属性,Afaik,没有索引顾问可以用在核心-data。

使用仪器中的真实数据库进行测试(使用该仪器进行核心数据提取)可帮助您找到瓶颈,并可能是您遇到的最佳答案。

+0

我有一堆标记为索引的属性?那么只有1真的被索引?这可能是我的问题的根源。 – Slee 2012-02-22 15:01:10

+0

他们分开索引,但优化器只能使用1个索引每fetchRequest – Bjinse 2012-02-22 20:22:19

+0

很棒的信息,谢谢 – Slee 2012-02-23 13:57:49