Предикаты соединения iOS
Я пишу приложение, которое имеет базу данных фотографий. С каждой фотографией связано несколько тегов, а в приложении есть страница поиска с множеством переключателей, которая позволяет пользователям искать фотографии только на основе интересующих их тегов. Каждый из этих тегов сохранилцелое число Я БЫ'потому что они соответствуют внешней базе данныхs идентификаторы, поэтому я пытаюсь найти их просто по идентификатору.Все поля идентификаторов проиндексированы.
Проблема возникает, когда предикаты, которые я пишу, становятся достаточно большими, потому что пользователь может выбирать из множества различных тегов для фильтрации. Эти теги сгруппированы в 3 категории [публикации, бренды и продукты], и поэтому мои запросы настроены так:ИЛИ ЖЕ'редактировать в категории, и 'А ТАКЖЕ'перебрал эти категории.
Примерный предикат запроса в итоге выглядит примерно так:
(parentPublication.publicationId==1 OR parentPublication.publicationId==2 OR parentPublication.publicationId==5)
AND (ANY brands.brandId==12 OR ANY brands.brandId==2 OR ANY brands.brandId==0 OR ANY brands.brandId==3 OR ANY brands.brandId==5 OR ANY brands.brandId==6 OR ANY brands.brandId==7)
AND (ANY products.productId==2 OR ANY products.productId==3 OR ANY products.productId==6)
Они могут стать намного больше, но вы понимаете. Моя проблема в том, что все онивыполнение дорогих соединенийКогда пользователь выбирает более 10 или 15, запросы выполняются очень долго и даже могут вызвать сбой приложения.
Кажется, было бы более эффективно написать что-то вроде:
parentPublication.publicationId IN (1,2,5)
AND (ANY brands.brandId IN (12,2,0,3,5,6,7))
AND (ANY products.productId IN (2,3,6))
Но я не могу заставить этот синтаксис работать.
Поэтому мой вопрос: поддерживается ли этот тип синтаксиса, и если да, может ли кто-нибудь показать мне, как правильно его написать?
Или есть лучший способ подойти к этому типу запросов к Базовым данным вместе?