3

假设有表 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 有真正的理由吗?

谢谢!

4

1 回答 1

3

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

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

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

此外,每次插入时,都需要更新索引。所以要小心添加索引的列。

于 2011-12-16T19:23:11.077 回答