2011-12-16 120 views
3

Supose有表用戶配置:Django模型:是否有理由使用db_index搜索字段?

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嗎?

謝謝!

回答

3

是的,當然。 Django使用數據庫,因此如果您在這些字段上搜索,查找將受益於數據庫索引。

請注意,一旦創建了表格,即使在將db_index添加到定義之後再次運行它,syncdb也不會添加索引 - 您需要直接在數據庫shell中修改表格定義,或者使用像南方這樣的工具。

請記住,像大多數規模問題一樣,這些僅適用於統計數量較大的行(10,000個規模不大)。

此外,每次插入時,索引都需要更新。所以要注意添加索引的列。

+0

在Django 1.5之前,當您只能對單個字段執行索引時,假設您將這兩個字段編入索引,則在執行qs.filter(field1 = foo,field2 = 2)時會發生什麼行爲。索引使用? – 2013-01-18 13:55:16

相關問題