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

时间:2012-02-21 20:05:04

标签: iphone objective-c core-data

我正在尝试找出一种方法来优化我的一些CoreData提取请求。我目前有NSPredicates,有2或3个参数可供搜索。他们都被编入索引。

我可以搜索一个索引或者我可以搜索的几个索引更快吗?对于int的索引也比对字符串的索引更快吗?

1 个答案:

答案 0 :(得分:2)

确实有必要确保选择最先区分的记录。例如,如果90%的记录处于活动状态并且同时选择其他记录,则仅选择具有特定键值的几个记录(具有索引可用)比选择所有活动记录要快得多。在这种情况下,您可能应该更好地删除非区分字段上的索引以确保使用了拒绝字段上的索引。

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

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

product.subgroup.code == %@

在一个小故障中(在0.1秒内)从150.000个产品中选择正确的产品,同时:

product.subgroup.maingroup.code == %@

在约1.5秒内从150,000种产品中选择合适的产品

在核心数据中,您只能告诉单个属性在数据模型编辑器中编入索引。在实际SQL数据库中,您将一次索引多个属性。 Afaik,核心数据中不能使用索引顾问。

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