使用 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
添加到声明中,然后进行 运行 迁移。
我有一个模型如下图,
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
添加到声明中,然后进行 运行 迁移。