写真のデータベースを持つアプリケーションを作成しています。各写真にはいくつかのタグが関連付けられており、アプリケーションには多くのトグルを備えた検索ページがあり、ユーザーは関心のあるタグのみに基づいて写真を検索できます。これらのタグはそれぞれ、外部データベースの ID に対応する整数ID を格納しているため、単純に ID で検索しようとしています。 ID フィールドはすべて索引付けされています。
私が書いている述語が非常に大きくなると、問題が発生します。これは、ユーザーがさまざまなタグからフィルターを選択できるためです。これらのタグは 3 つのカテゴリ [出版物、ブランド、製品] にグループ化されているため、クエリはカテゴリ内で「OR」され、これらのカテゴリ間で「AND」されるように設定されています。
クエリ述語の例は、最終的に次のようになります。
(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))
しかし、その構文を機能させることができないようです。
だから私の質問は: このタイプの構文はサポートされていますか? もしそうなら、誰かがそれを正しく書く方法を教えてもらえますか?
それとも、コア データに対してこの種のクエリをまとめてアプローチするためのより良い方法はありますか?