【问题标题】:Does Django index Autofield / ID keys in PostgreSQL?Django 是否在 PostgreSQL 中索引 Autofield / ID 键?
【发布时间】:2020-07-30 00:24:36
【问题描述】:

Django 的文档指出 id 字段是使用 AutoField are indexed 创建的:

id被数据库索引,保证唯一。

类似地,它将索引应用于每个 FK 关系。

然而,在 PostgreSQL 中,虽然 FK 似乎已被索引,但 ID 却没有。这是一个例子:

class TestModelBase(models.Model):
    name = models.CharField(max_length=50)
    fkfield = models.ForeignKey(TestModelFK, blank=True, null=True,
                                on_delete=models.CASCADE)
    m2mfield = models.ManyToManyField(TestModelM2M, related_name='base_m2m')

此模型似乎应用了fkfield 索引,但没有应用id 自动字段。来自下面的 PGAdmin:

我错过了什么吗?

【问题讨论】:

    标签: django database postgresql


    【解决方案1】:

    PostgreSQL 自动为主键创建索引。来自the docs

    添加主键将自动在主键中列出的列或列组上创建唯一的 B 树索引,并将强制将列标记为 NOT NULL。

    PGAdmin 似乎没有显示这些索引。 This mailing list thread 是我能找到的最好的来源。

    【讨论】:

    • 谢谢。有趣的是,django + postgres 仍然允许您在主键上手动创建索引(例如 indexes = [models.Index(fields=['id'], name='%(class)s_id_idx'),] )。我会认为它会拒绝重复?
    • Postgres 允许在同一个字段上有多个索引,所以 Django 也应该这样做。如果 Django 有一个 system check 来警告它,这可能会很有用。
    猜你喜欢
    • 2018-03-05
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多