Django - UniqueConstraint с несколькими полями имеет тот же эффект, что и Index с одним полем?

Я написал django модель, которую вы можете увидеть ниже, я хочу знать, имея UniqueConstraint достаточно для Поиска и выбора строки на основе пользователя и типа соикала или мне нужно добавить Index для них. Если да, то в чем разница между ними, потому что на основе моего поиска UniqueConstraint создает уникальный индекс на DB, как posgresql.

модель:

class SocialAccount(Model):
    """Social account of users"""

    added_at: datetime = DateTimeField(verbose_name=_("Added At"), auto_now_add=True)
    user = ForeignKey(
        to=User,
        verbose_name=_("User"),
        db_index=True,
        related_name="socials",
    )
    type = PositiveSmallIntegerField(
        verbose_name=_("Type"),
        choices=SocialAcountType,
    )

    class Meta:
        constraints = UniqueConstraint(
            # Unique: Each User Has Only one Social Account per Type
            fields=(
                "user",
                "type",
            ),
            name="user_social_unique",
        )
        # TODO: check the UniqueConstraints is enough for index or not
        indexes = (
            Index(  # Create Index based on `user`+`type` to scan faster
                fields=(
                    "user",
                    "type",
                ),
                name="user_social_index",
            ),
        )

Основываясь на приведенном выше описании, я искал, но не смог найти ни одного подходящего документа, чтобы узнать, как действует django и нужен ли нам дополнительный индекс для них, если они уже являются уникальными вместе?

Примечание: я знаю, что есть и другие похожие вопросы, но они не могут точно ответить на мой вопрос

.

UniqueConstraint достаточно.

Раньше я тоже был озадачен этим вопросом. Я провел небольшое тестирование и нашел описание из документации pg. https://www.postgresql.org/docs 11.6. Уникальные индексы

PostgreSQL автоматически создает уникальный индекс, когда для таблицы определено уникальное ограничение или первичный ключ. Индекс охватывает столбцы, составляющие первичный ключ или уникальное ограничение (многостолбцовый индекс, если необходимо), и является механизмом, обеспечивающим соблюдение ограничения.

Вернуться на верх