製品、カテゴリ、pro_cat_link の 3 つのテーブルがあります。製品は、テーブル pro_cat_link を介して 1 つまたは複数のカテゴリにリンクできます。
私のクエリは、一連のカテゴリに一致するすべての製品を検索するという問題に答える必要があります。例: 「黄色 AND 果物 AND スイーツ」であるすべての製品を検索します。
SO でこの問題を調査すると、現在使用している解決策しか見つかりませんでした: 複雑な SQL クエリ - 複数の異なる外部キーに一致する項目を見つける
私の場合、クエリは次のようになります。
SELECT products.id, COUNT(DISTINCT categories.id) as countCat
FROM products
INNER JOIN pro_cat_link ON (pro_cat_link.product_id = products.id)
WHERE pro_cat_link.category_id IN (3,6,8,10)
GROUP BY product.id
ORDER BY product.date DESC
HAVING countCat = 4
つまり、カテゴリ ID (3、6、8、10) のいずれかに一致するすべての製品を選択し、正確に 4 つのカテゴリが一致する製品のみを保持します。
これはうまく機能しますが、COUNT()、GROUP BY、ORDER BY によって適切なインデックス作成が非常に制限されるため、パフォーマンスの問題が発生しています。その問題を解決するためのより良い方法を考えられる人はいますか?