Kri*_*oot 6 performance core-data nspredicate ios
在我的模型中,我设置了一个Entity(让我们说Person)将一个属性作为字符串(称为"name"),然后在其上放置一个索引.如果我对我的模型进行了大量查询,那么查询就会导致性能下降.我的查询很简单
[ NSPredicate predicateWithFormat: @"%K == %@", @"name", lPersonName ];
Run Code Online (Sandbox Code Playgroud)
所以我认为索引会完成它的工作.
然后,如果我计算一些简单的哈希标记并将其与我的实体一起存储在索引的整数属性(称为"哈希")中,并执行更窄的查询,则性能消耗就会消失.像这样:
[ NSPredicate predicateWithFormat: @"%K == %d AND (%K == %@)",
@"hash", [ self calculateHashForName: lPersonName ],
@"name", lPersonName ];
Run Code Online (Sandbox Code Playgroud)
为什么整数上的索引比字符串上的索引快得多?我忽略了什么吗?这是核心数据问题吗?
当然,我可以使用哈希标记保留解决方案,但如果我忽略了一些我很想知道的事情,而不是迟早.
有(至少)两种可能性:
名称字符串的大小比整数大,因此字符串索引所需的存储空间更大。数据库性能直接受存储大小的影响,因为查找成本是通过磁盘查找来衡量的(暂时忽略缓存),数据越大,需要的查找次数越多
SQLite 将表存储在 B 树中,并且可以使用 INTEGER PRIMARY KEY 以最高效率查找记录,无需额外索引 - 从您的代码中不清楚(对我来说)哈希是否被用作 INTEGER PRIMARY KEY