Производительность NSPredicate, очень медленная
У меня есть NSPredicade, который выглядит
NSPredicate * predicate = [предикат NSPredicateWithFormat: @"((strasse.checks CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS [cd] YES)) ИЛИ ((strasse.standort.ortcheck CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS [cd] YES)) ИЛИ ((strasse.standort.ortcheck CONTAINS [cd] YES) AND (raumattribute.schalter CONTAINS [cd] NO) ИЛИ (strasse.checks CONTAINS [cd] YES) AND (raumattribute.schalter СОДЕРЖИТ [cd] НЕТ)) ИЛИ (strasse.standort.ortcheck CONTAINS [cd] NO) "];
Но производительность очень медленная. Есть ли способ сделать это проще и быстрее?
Во-первых, вы можете упростить свой предикат, чтобы он выглядел следующим образом:
NSPredicate *predicate =
[NSPredicate predicateWithFormat:
@"(raumattribute.schalter CONTAINS YES OR raumattribute.schalter CONTAINS NO) AND \
(strasse.checks CONTAINS YES OR strasse.standort.ortcheck CONTAINS YES) OR \
strasse.standort.ortcheck CONTAINS NO"];
Тогда, если мы предположим, что raumattribute.schalter
и strasse.standort.ortcheck
содержат только логические значения, мы можем снова упростить предикат:
NSPredicate *predicate =
[NSPredicate predicateWithFormat:
@"raumattribute.schalter.@count > 0 AND \
(strasse.checks CONTAINS YES OR strasse.standort.ortcheck.@count > 0) OR \
strasse.standort.ortcheck CONTAINS NO"];
- Вопросы
- Nspredicate
- Производительность NSPredicate, очень медленная