【问题标题】:What are Indexes in the Xcode Core-Data data model inspectorXcode Core-Data 数据模型检查器中的索引是什么
【发布时间】:2012-01-23 15:57:14
【问题描述】:

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

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

这些索引到底是什么?
它们与索引属性有什么关系吗?如果他们在这个检查器中指定索引和为单个属性选择“索引”有什么区别?

【问题讨论】:

    标签: ios xcode core-data


    【解决方案1】:

    Optimizing Core Data searches and sorts

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

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

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

    但是如果它被索引(换句话说,按电子邮件降序排序)呢? --> 然后Core Data 只检查那些以a 开头的记录。如果 Core Data 到达b,那么它将停止搜索,因为很明显,自从它被索引以来,没有更多的电子邮件以a 开头的记录。

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


    或:

    希望它们是等价的:-)

    但如果您想要:电子邮件以 a 开头,名称以 b 开头 您可以检查 name 的 INDEXED 属性以查找 PBOUser 实体,或者: p>

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,您应该提供一个样本来澄清这个问题。
      • 请提供样品
      • @BartłomiejSemańczyk 我没有例子。
      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 2017-12-05
        • 2017-12-10
        • 2021-06-16
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多