使用 pk 与自定义查询对象 object_id

Querying an object with pk vs custom object_id

我有一个模型如下图,

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    middle_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30)
    person_id = models.CharField(max_length=32, blank=True)

其中 person_id 在保存时填充,它是由 uuid 生成的随机十六进制字符串,看起来像 'E4DC6C20BECA49E6817DB2365924B1EF'

所以我的问题是,在包含大量对象的数据库中,查询

Person.objects.get(pk=10024)

(pk) 对比 (person_id)

Person.objects.get(person_id='E4DC6C20BECA49E6817DB2365924B1EF')

哪种方法在大规模数据中有性能优势?

我不太了解数据库内部结构。

我的数据库是postgresql

要从查询数据库中的列中获得良好的性能,需要对其进行索引。主键列自动索引(根据定义),但您的 person_id 不会;您应该将 db_index=True 添加到声明中,然后进行 运行 迁移。