gpt4 book ai didi

ios - 低效的CoreData IN查询

转载 作者:行者123 更新时间:2023-12-03 18:37:54 26 4
gpt4 key购买 nike

我已经有了一个非常简单的CoreData设置,看起来像这样:

Track {
NSSet *artists;
NSSet *genres;
}

Artist {
NSSet *tracks;
}

Genre {
NSSet *tracks;
}

所以这里的想法是,一个 Track可以有多个 GenreArtist。在两种情况下,回溯到 Track的关系都相反。

我正在尝试获取 Artist的列表,该列表至少具有给定 Track的一个 Genre。我正在使用以下谓词: [NSPredicate predicateWithFormat:@"ANY tracks in %@", genre.tracks]

在大多数情况下,这很快速,但是有时候我的 Genre包含10k + Tracks。这会生成带有10k +变量的SQL查询...这需要很长时间才能运行。

我尝试了各种方法来避免这种情况,包括:
[NSPredicate predicateWithFormat:@"ANY %@ in tracks", genre.tracks]
[NSPredicate predicateWithFormat:@"SELF IN SUBQUERY(tracks, $t, %@ IN $t.genres)", genre]
[NSPredicate predicateWithFormat:@"(SUBQUERY(tracks, $t, %@ IN $t.genres).@count > 0)", genre];

可能还有一些我忘记了的东西。每个编译,但不返回 Artist对象。

如何改善我开始使用的IN查询的效率(可行)?

最佳答案

您可以使用

[NSPredicate predicateWithFormat:@"(SUBQUERY(tracks, $t, ANY t.genres = %@).@count > 0)", genre]

给出与原始谓词相同的结果,但避免构建具有许多参数的查询。

关于ios - 低效的CoreData IN查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com