У меня есть следующее определение модели:
class Shop(models.Model):
label = models.CharField(max_length=50, unique=True, primary_key=True)
class Product(models.Model):
shop = models.ForeignKey(Shop, on_delete=models.CASCADE, db_index=True)
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=12, decimal_places=2)
Поскольку Shop
имеет CharField
в качестве первичного ключа, я хочу проиндексировать свою таблицу Product
на основе этой CharField
, на которую ссылаютсяиспользуя внешний ключ.С помощью описанной выше настройки, как мне написать запросы, которые будут гарантировать, что индекс используется, чтобы продукты могли быть получены быстрее?
Допустим, я пишу запрос следующим образом:
Product.objects.filter(shop="Amazon", price__gte="10.00")
Будет ли этот запрос автоматически использовать набор индексации в моих моделях и, следовательно, будет ли он выполняться быстрее для больших наборов данных?Или мне нужно что-то лишнее?