如果我正在执行核心数据获取请求,并应用排序描述符,例如:
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO];
该属性createDate
应该是索引属性吗?为什么或者为什么不?
如果我正在执行核心数据获取请求,并应用排序描述符,例如:
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO];
该属性createDate
应该是索引属性吗?为什么或者为什么不?
数据库索引是有代价的。数据库必须使索引保持最新,这会减慢插入、删除和可能的更新速度。写性能。
但是索引加快了查询和按子句排序。读取性能。
这是两者之间的权衡。对你来说最重要的是什么?读写性能?
好吧,索引还有另一个副作用:内存使用。如果您只需要对某些条目进行一次排序,而没有索引,则必须在内存中对它们进行排序。这意味着将它们全部加载到内存中。至少您要排序的列,而不是全部。但还是。
与往常一样,仪器是决定什么是最好的最好方法。
根据文档,是的,如果您有 sql 支持的存储。谓词和排序描述符在数据库中编译和评估,您将获得索引优势。
请参阅“获取谓词和排序描述符”部分。