设置表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有真正的理由吗?
谢谢!
答案 0 :(得分:3)
是的,当然。 Django使用数据库,因此如果您在这些字段上搜索,查找将受益于数据库索引。
请注意,一旦您创建了表格,syncdb
即使您在定义中添加db_index
后再次运行索引也不会添加索引 - 您需要直接在数据库shell中修改表定义,或使用像South这样的工具。
请记住,与大多数规模问题一样,这些仅适用于统计上有大量行数(10,000不大)的情况。
此外,每次执行插入操作时,都需要更新索引。因此,请注意添加索引的列。