Поиск подстановочного знака без учета регистра (name__icontains='something'
) ОБЯЗАТЕЛЬНО будет более дорогим запросом БД, чем точное совпадение с учетом регистра (name='something'
).Замедление в 5 раз не кажется необоснованным, и оно будет сильно различаться в зависимости от любого из следующих факторов:
- Database Engine (MySQL, PostgreSQL, SQLite и т.Количество записей в БД
- Объем текста в каждом поле имени, который необходимо найти в
- Независимо от того, существует ли соответствующий индекс, который БД может использовать для этого столбца
Последний там очень хитрый.Полнотекстовое индексирование для базы данных очень сложно понять, очень легко ошибиться и даже не поддерживается всеми механизмами баз данных.
То же самое относится к date
против date__range
: выВы используете быстрое, простое, легко индексируемое точное совпадение в одном и неточное совпадение в другом.
Суть: если вам не нужны неточные совпадения, не используйтеих.Это дорогостоящие операции с БД, и они БУДУТ значительно дольше.