Здесь нет ничего действительно "обходного пути". Это ожидаемое поведение. select_related
выполняет SQL-JOIN для каждого внешнего ключа, который вы передаете. Это по своей сути более сложный запрос для базы данных для обработки. Чем больше строк в ваших таблицах, тем дольше это займет.
Действительно, все, что вы можете сделать в этом сценарии, это применить как можно больше оптимизации к вашему столу. Если столбцы profile_id
и address_id
еще не проиндексированы, вы должны добавить для них индексы (но у меня есть подозрение, что Django уже сделал это для вас.
Если вам не нужны все поля, вы можете попробовать отправить более ограниченный запрос (требующий меньше сетевой работы), используя .values()
или .values_list()
. Вы даже можете указать поля для profile
и address
.
Однако, если эти поля уже проиндексированы и вам нужны все данные, вам придется либо справиться с медлительностью, либо предпринять более радикальные меры с вашей базой данных. Вы можете подключить его к своему собственному серверу, если он еще не создан, дать серверу больше ресурсов (оперативная память, ядра и т. Д.), Если он недостаточно силен, создать кластер для распределения нагрузки и т. Д.