Django用户模型优化

6ioyuze2  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(99)

UserModel上有很多条目。3个UserModel查询运行非常慢。如何对UserModel进行必要的更改和优化,以使3个查询运行得更快?

class UserModel(models.Model):
  username = CharField(max_length=255)
  role = JSONField() # format of ['admin', 'operator']

UserModel.objects.filter(username='john').first()
UserModel.objects.filter(username__contains='doe').first()  
UserModel.objects.filter(role__contains='operator').first()
yyyllmsg

yyyllmsg1#

如果表中有很多记录,就必须使用索引。

  1. UserModel.objects.filter(username='john')只过滤记录的相等性,所以BTree索引将简单地处理这个问题。
  2. UserModel.objects.filter(username__contains='doe')被转换为ILIKE '%doe%',所以我们需要类似trigram index的东西。要使用它,请在INSTALLED_APPS中添加django.contrib.postgres并在PostgreSQL上激活pg_trgm扩展。您可以使用TrigramExtension迁移操作安装扩展。
  3. UserModel.objects.filter(role__contains='operator')只过滤包含给定键的记录。此查询可以使用Gin索引进行优化。有关实现细节,请参阅this answer

相关问题