Django: означает ли unique вместе DB index=True так же, как и ForeignKey?
поле на модели,foo = models.ForeignKey(Foo)
автоматически добавит индекс базы данных для столбца, чтобы сделать поиск быстрее. Это хорошо и хорошо, но документы Django не указывают, являются ли поля в модели-meta's unique_together
получите такую же обработку. У меня есть модель, в которой одно поле char, который указан в unique_together
требуются индекс для быстрого поиска. Я знаю, что ничего не повредит добавить дубликат db_index=True
в определении поля, но мне любопытно.
4 ответов
Если unique_together
добавляет индекс, это будет индекс с несколькими столбцами.
Если вы хотите, чтобы один из столбцов индексировался индивидуально, я считаю, что вам нужно указать db_index=True
в определении поля.
для тех, кто приходит сюда интересно, если они нуждаются в index_together
кроме unique_together
чтобы получить преимущество производительности индекса, ответ для Postgres -нет, они совпадают.
на в Django 1.5 и выше можно использовать {Model}.Meta.index_together
атрибут class. Если бы у вас было два поля с именем foo
и bar
, вы хотели добавить:
class Meta(object):
index_together = unique_together = [
['foo', 'bar']
]
если у вас есть только один набор уникальных полей, вы можете использовать одномерном массиве за unique_together
. Однако,документация не означает, что то же самое относится к index_together
.
это будет так:
class Meta(object):
unique_together = 'foo', 'bar'
index_together = [
['foo', 'bar']
]
это, однако,не поддерживается документацией:
class Meta(object):
unique_together = 'foo', 'bar'
index_together = 'foo', 'bar'
по данным документы, он будет обеспечивать уникальность только на уровне базы данных. Я думаю, что обычно создание уникального поля не означает, что у него есть индекс. Хотя вы также можете просто проверить уровень БД, если индекс существует. Все указывает на это, хотя это и не так.