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

Mat*_*uch 21 xcode core-data ios

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

Xcode侧边栏显示索引视图

对于屏幕截图,我做了两次"添加",因此"逗号,分隔,属性"只是默认值.

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

Bar*_*zyk 16

优化核心数据搜索和排序

正如标题所说,索引是为了加快搜索和排序数据库.但是,它会减慢保存持久存储的更改速度.当您在查询中使用NSPredicateNSSortDescriptor对象时,这很重要.

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

在此输入图像描述

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

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

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

在此输入图像描述
要么:
在此输入图像描述

希望他们是等同的:-)

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

在此输入图像描述

这是你如何优化你的数据库:-)


Mar*_*zyk 6

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


Dir*_*irk 5

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

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

SELECT * FROM customer WHERE surname = "Doe" AND firstname = "Joe";
Run Code Online (Sandbox Code Playgroud)

该语句可以使用复合索引surname, firstname。如果您只是搜索surname,该索引也将很有用,但是如果您仅搜索,则不会firstname。可以将索引视为电话簿:首先按姓氏排序,然后按名字排序。因此,属性的顺序很重要。