简短问题:
有没有办法告诉CoreData在创建INDEX时使用COLLATE?
详细说明:
我需要按名称显示不区分大小写的排序列表中的客户端列表。 “name”字段在xCode中标记为INDEXING。我使用以下排序描述符:
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
这导致CoreData的以下查询。一切都好到现在。
SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZNAME FROM ZCLIENT t0 WHERE t0.Z_PK IN (?, ?, ?) ORDER BY t0.ZNAME COLLATE NSCollateLocaleSensitiveNoCase LIMIT 20
但是如果我查看CoreData创建的INDEX,它在创建INDEX时不会使用COLLATE。这意味着所有不区分大小写的查询对于大型数据集来说都会很慢。
CREATE INDEX ZCLIENT_ZNAME_INDEX ON ZCLIENT (ZNAME)
有没有办法创建基于COLLATE的INDEX?有没有办法在xCode中指定它?
答案 0 :(得分:3)
没有。如果您希望能够这样做,请提交an enhancement request。如果您可以包含一个示例项目,展示COLLATE如何使事情变得更加出色和更快,那么您可以从CoreData团队获得额外的奖励积分。