将db_index添加到Django User模型?

时间:2016-01-13 02:45:12

标签: django postgresql django-models django-queryset

我有一个自定义用户模型,它包含以下字段:

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=60, unique=True)
    email = models.EmailField(max_length=120, unique=True)
    full_name = models.CharField(max_length=50, blank=True)
    is_active = models.BooleanField(default=True)

我知道usernameemail会自动添加db_index,因为它设置为unique=True

db_index=Truefull_name字段添加is_active是否有意义?

我有一个搜索功能,可以检查正则表达式是否与full_name匹配。在我的模型经理中,我也会过滤is_active=True

我想优化查询,但如果没有必要,我们不想在我的数据库中添加表格。

谢谢!

2 个答案:

答案 0 :(得分:0)

是的,只需将db_index=True添加到您的字段中就像这样

full_name = models.CharField(max_length=50, blank=True,db_index=True)

迁移后,您的数据库将为此字段创建索引。

请参阅:https://docs.djangoproject.com/en/1.9/ref/models/fields/#db-index

  

Field.db_index

     

如果为True,将为该字段创建数据库索引。

答案 1 :(得分:0)

如果使用full_name进行搜索,索引是否用于regex是可疑的。您希望通过查看查询规划器的输出来确保这一点(例如postgres:EXPLAIN ANALYZE select * from myuser where user=...;)。

如果没有使用它(例如因为正则表达式降低了所有内容),那么你必须创建一个不同的索引。例如,在较低的套管值或甚至是GIN指数(对于部分匹配)。