Модели Django: есть ли причины для создания искомого поля с помощью db_index? - PullRequest
3 голосов
/ 16 декабря 2011

Предположим, есть таблица 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 Ответ

3 голосов
/ 16 декабря 2011

Да, конечно. Django использует базу данных, поэтому при поиске по этим полям поиск получит выгоду от индекса базы данных.

Обратите внимание, что после создания таблицы syncdb не будет добавлять индексы, даже если вы запустите ее снова после добавления db_index к определению - вам нужно изменить определение таблицы непосредственно в оболочке базы данных. или используйте такой инструмент, как South.

Имейте в виду, что, как и большинство проблем масштабирования, они применяются только в том случае, если у вас статистически большое количество строк (10 000 невелико).

Кроме того, каждый раз, когда вы делаете вставку, индексы должны обновляться. Так что будьте осторожны, к какому столбцу вы добавляете индексы.

...