核心数据。索引和索引之间有什么区别?

CoreData. What's the difference between indexes and indexed?

我希望加快对 SQL 支持的 CoreData 实例的查询(显示按日期排序的记录)。我知道索引可以帮助减少查询时间,但两者之间有什么区别:

突出显示属性所属的实体,然后将逗号分隔的属性列表添加到索引字段中,如下所示:

或者突出显示属性,然后选中索引框,如下所示:

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

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

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

该语句可以使用复合索引surname, firstname。如果您只搜索 surname,该索引也很有用,但如果您只搜索 firstname,则该索引不会有用。将索引想象成一本 phone 书:它首先按姓氏排序,然后按名字排序。所以属性的顺序很重要。

在您的情况下,您应该首先使用单个索引(即,select Indexed 用于您想要搜索的属性)。例如,如果您只搜索 babyId,则永远不会使用您显示的复合索引。

在 WWDC 2017 上,苹果将此更新为使用 Fetch Index(参见:https://developer.apple.com/videos/play/wwdc2017/210/?time=997) 要添加它,select 实体然后转到 Editor -> Add Fetch Index