核心数据:未在子实体上创建复合索引
Posted
技术标签:
【中文标题】核心数据:未在子实体上创建复合索引【英文标题】:Core Data: Compound Indexes are not getting created on a child entity 【发布时间】:2015-05-21 05:22:36 【问题描述】:情况如下:我有一个父子核心数据模型关系。我在子实体上有一些字段,我通过在获取请求上使用排序描述符来订购这些字段。我已将它们添加到数据模型检查器实体部分的索引列表中,例如 field1,field2。
但是,在设置 -com.apple.CoreData.SQLDebug 1 时,我看不到正在创建的复合索引。此外,我能够获得 SQLite 生成的文件,我能看到的只是为其他目的创建的单字段索引,而不是复合索引。
对子实体执行此操作是否有限制?有没有人在子实体上创建复合索引?谢谢!
【问题讨论】:
【参考方案1】:好吧,我最终从头开始创建了一个简单的 Core Data 项目,其中只有一个父实体和一个子实体,只是为了看看当我在核心数据模型中选择和取消选择父实体作为子实体的父实体时发生了什么。
通过使用-com.apple.CoreData.SQLDebug 1
,我可以看到只有当子实体没有父实体作为父实体时才会创建复合索引。
顺便说一句,我运行的是 ios 8.3。
作为旁注,我调试了 Core Data 代码,似乎调用了私有类 NSSQLConnection
的 createIndexesForEntity:
方法。但是,在方法代码的最开始,它调用了另一个私有类NSSQLEntity
的方法isRootEntity
。当返回 NO 时,它会跳过方法代码并返回而不做任何事情。
这个功能对我来说非常重要,以至于我最终从项目的核心数据模型中的所有实体中删除了父实体设置。
【讨论】:
以上是关于核心数据:未在子实体上创建复合索引的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server创建复合索引时,复合索引列顺序对查询的性能影响