在Xcode中,您可以在数据模型检查器中为实体添加“索引”。

对于截图,我点击了两次"add“,所以”逗号,分隔,属性“只是缺省值。
这些索引到底是什么?
它们与索引属性有什么关系吗?如果它们有,那么在这个检查器中指定索引和为单个属性选择“索引”之间有什么区别?
发布于 2015-04-03 21:19:17
Optimizing Core Data searches and sorts
正如标题所说,索引是为了加快数据库的搜索和排序速度。但是,将更改的保存到持久化存储中时,会减慢速度。当您在查询中使用NSPredicate和NSSortDescriptor对象时,这很重要。
假设您有两个实体:PBOUser和PBOLocation (多对多)。您可以在下图中看到它的属性:

假设数据库中有10,000个用户和50,000个位置。现在我们需要找到每一个在a上有电子邮件的用户。如果我们在没有索引的情况下提供这样的查询,核心数据必须检查每条记录(基本上是10,000条)。
但是,如果它是索引的(换句话说,按email降序排序)呢?-->那么核心数据只检查那些以a开头的记录。如果核心数据达到b,那么它将停止搜索,因为显然没有更多的记录的电子邮件以a开头,因为它已被索引。
如何从Xcode中对核心数据模型启用索引:

或:

希望它们是等价的:-)
但是,如果您希望:电子邮件以a b开头,名称以 entity开头,您可以检查PBOUser实体的索引name属性,或者:

以下是优化数据库的方法:-)
发布于 2011-12-20 01:15:10
使用索引列表将复合索引添加到实体。复合索引是跨越多个属性或关系的索引。复合索引可以使搜索速度更快。数据模型中的属性和关系的名称是最常见的索引。必须使用SQLite存储区才能使用复合索引。
发布于 2016-07-15 14:51:49
将具有单个属性的行添加到Indexes列表相当于为该属性选择Indexed:它为该属性创建一个索引,以加快查询语句中的搜索速度。
Indexes列表用于复合索引。当您知道要搜索在查询的WHERE子句中组合的这些属性的值时,复合索引非常有用:
SELECT * FROM customer WHERE surname = "Doe" AND firstname = "Joe";此语句可以使用复合索引surname, firstname。如果只搜索surname,那么这个索引也会很有用,但如果只搜索firstname,就没有用了。将索引想象成一个电话簿:它首先按姓氏排序,然后按名字排序。因此,属性的顺序很重要。
https://stackoverflow.com/questions/8562711
复制相似问题