我有一个自定义用户模型,它包含以下字段:
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)
我知道username
和email
会自动添加db_index
,因为它设置为unique=True
。
为db_index=True
和full_name
字段添加is_active
是否有意义?
我有一个搜索功能,可以检查正则表达式是否与full_name
匹配。在我的模型经理中,我也会过滤is_active=True
。
我想优化查询,但如果没有必要,我们不想在我的数据库中添加表格。
谢谢!
答案 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指数(对于部分匹配)。