Django фильтрация по Many To Many

У меня есть две модели:

class Category(models.Model):
    name = models.CharField(max_length='255')
    parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, related_name='children', related_query_name='child')

class Product(models.Model):
    name = models.CharField(max_length='255')
    category = models.ManyToManyField(Category)

В базе примерно 6млн товаров и 12к категорий. У каждого товара есть несколько категорий. Я фильтрую по category_id:

categories = [1, 5, 6, 7, ....]
products = Product.objects.filter(category__id__in=categories)

Фильтрация по MtM может возвращать дубликаты, поэтому нужно использовать distinct(). Проблема в том, что с distinct время выполнения запроса достигает 15с, тогда как без него 3 секунды. Может есть способ выбора уникальных Product без distinct? Буду очень благодарен за любой ответ по теме


Ответы (0 шт):