Я призываю вас прочитать все, что предлагают другие ответы, и все, что вы можете найти по этому вопросу, потому что это хорошая информация, которая поможет вам стать лучше.
Тем не менее, одна из приятных особенностей Django и других подобных фреймворков заключается в том, что по большей части вам не нужно знать, что происходит за кулисами в БД. Django автоматически добавляет индексы для полей, которые в них нуждаются. Поощрение добавлять больше зависит от вариантов использования вашего приложения. Если вы постоянно запрашиваете на основе одного конкретного поля, вы должны убедиться, что это поле проиндексировано. Это может быть уже (если это внешний ключ, первичный ключ и т. Д.), Но другие случайные поля обычно не являются.
Существуют также различные оптимизации, которые зависят от клиента базы данных. Джанго не может сделать здесь много, потому что его цель - оставаться независимой от базы данных. Так что, если вы используете PostgreSQL, MySQL, что угодно, читайте об оптимизации и передовых практиках в отношении этих конкретных клиентов.