CoreData.索引和索引之间有什么区别?

Vap*_*olf 12 sqlite core-data nsmanagedobject ios nsmanagedobjectmodel

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

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

在此输入图像描述

或突出显示该属性,然后检查索引框,如下所示:

在此输入图像描述

Dir*_*irk 9

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

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

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

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

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

  • @taitanxiami 这是个好问题。刚刚找到答案:Xcode 9 现在在 Editor 菜单中有一个命令“Add Fetch Index”。如果您选择一个实体,它将被启用。您可以通过向该索引添加多个属性来定义复合索引。 (3认同)

Mat*_*ich 8

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