Django模型:是否有理由用db_index创建搜索字段?

时间:2011-12-16 18:35:21

标签: django django-models django-database

设置表UserProfile:

class UserProfile(models.Model):
    name = models.CharField(max_length=30, db_index=True)     # db_index 1
    email = models.EmailField(unique=True, db_index=True)     # db_index 2
    password = models.CharField(max_length=60)
    birthday = models.DateField(db_index=True)                # db_index 3
    about = models.TextField(blank=True)
    created = models.DateField(auto_now_add=True)
    lang = models.CharField(max_length=1, choices=LANG, blank=True)

在网站上有搜索表单,其中包含以下过滤条件:姓名,年龄,电子邮件。

那么,在这些过滤器中使用db_index有真正的理由吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

是的,当然。 Django使用数据库,因此如果您在这些字段上搜索,查找将受益于数据库索引。

请注意,一旦您创建了表格,syncdb即使您在定义中添加db_index后再次运行索引也不会添加索引 - 您需要直接在数据库shell中修改表定义,或使用像South这样的工具。

请记住,与大多数规模问题一样,这些仅适用于统计上有大量行数(10,000不大)的情况。

此外,每次执行插入操作时,都需要更新索引。因此,请注意添加索引的列。