Xcode核心数据数据模型检查器中的索引是什么

时间:2011-12-19 14:24:16

标签: ios xcode core-data

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

Xcode sidebar showing the Indexes view

对于屏幕截图,我确实点击了“添加”两次,因此“逗号,分隔,属性”只是默认值。

这些指数究竟是什么? 它们与索引属性有关吗?如果它们在此检查器中指定索引和为单个属性选择“索引”之间有什么区别?

3 个答案:

答案 0 :(得分:14)

Optimizing Core Data searches and sorts

正如标题所说,索引是加快搜索和排序您的数据库。但是会减少保存更改到持久存储。在查询中使用NSPredicateNSSortDescriptor个对象时,这很重要。

假设您有两个实体:PBOUserPBOLocation (多对多)。您可以在下图中看到它的属性:

enter image description here

假设在数据库中有10,000个用户和50,000个位置。现在,我们需要从a开始查找每个用户的电子邮件。如果我们在没有索引的情况下提供此类查询,则Core Data必须检查每个记录(基本上为10,000)

但是,如果它被编入索引(换句话说,按电子邮件降序排序)怎么办? - >然后,Core Data仅检查以a开头的记录。如果核心数据达到b,那么它将停止搜索,因为很明显没有更多的记录,其电子邮件以a开头,因为它已编入索引。

如何在Xcode中启用Core Data模型的索引:

enter image description here

enter image description here

希望它们是等价的: - )

但是如果你想要的话:电子邮件以a开头,名称以b开头你可以为name PBOUser属性检查INDEXED实体,或:

enter image description here

这是优化数据库的方法:-)

答案 1 :(得分:6)

使用“索引”列表将复合索引添加到实体。复合索引是跨越多个属性或关系的索引。复合索引可以使搜索更快。数据模型中的属性和关系的名称是最常见的索引。您必须使用SQLite存储来使用复合索引。

答案 2 :(得分:4)

将具有单个属性的行添加到Indexes列表等同于为该属性选择Indexed:它为该属性创建索引以加速查询语句中的搜索。

Indexes列表适用于复合索引。当您知道要在查询的WHERE子句中搜索这些属性的值时,复合索引很有用:

SELECT * FROM customer WHERE surname = "Doe" AND firstname = "Joe";

此声明可以使用复合索引surname, firstname。如果您只是搜索surname,那么该索引也会很有用,但如果您只搜索firstname则不会。将索引想象成电话簿:它首先按姓氏排序,然后按名字排序。所以属性的顺序很重要。