【问题标题】:CoreData. What's the difference between indexes and indexed?核心数据。索引和索引有什么区别?
【发布时间】:2016-06-24 17:51:34
【问题描述】:

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

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

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

【问题讨论】:

标签: ios sqlite core-data nsmanagedobject nsmanagedobjectmodel


【解决方案1】:

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

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

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

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

在您的情况下,您应该首先选择单个索引(即,选择Indexed 作为您想要搜索的属性)。例如,如果您只搜索babyId,则永远无法使用您显示的复合索引。

【讨论】:

  • 要从代码中设置复合索引,另见(重叠)答案stackoverflow.com/a/8657785/3419541
  • 嗨,当我在最新版本的 Xcode 中找不到索引属性时,如何为表添加索引。
  • @taitanxiami 这是个好问题。刚刚找到答案:Xcode 9 现在在 Editor 菜单中有一个命令“Add Fetch Index”。如果您选择一个实体,它将被启用。您可以通过向该索引添加多个属性来定义复合索引。
  • @Dirk 你的意思是长按“添加实体”按钮,然后选择“添加提取索引”,最后选择对应的属性?
  • @taitanxiami 不,我不知道这个选项。我只是指 Xcode 9.0.1 菜单栏中的“编辑器”菜单。它会根据上下文变化,并在您编辑实体时提供此命令。
【解决方案2】:

在 WWDC 2017 上,Apple 对此进行了更新,改为使用 Fetch Index(参见:https://developer.apple.com/videos/play/wwdc2017/210/?time=997) 要添加它,请选择实体,然后转到 Editor -> Add Fetch Index

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 1970-01-01
    • 2020-01-26
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多