Django: эффективный поиск в базе данных - PullRequest
0 голосов
/ 14 декабря 2011

Мне нужен эффективный способ поиска по моим моделям, чтобы найти конкретного пользователя, вот список,

Пользователь - список пользователей, их имена и т. Д.
События - таблица событий для всех пользователей, когда они недоступны
Навыки - отношения «многие ко многим» с Пользователем, у пользователя может быть много навыков
Контракты - многие-к-одному с Пользователем, Пользователь может работать над несколькими контрактами, каждый из которых имеет оценку (если выполнено)
... и т. д.

Итак, я получил много таблиц, связанных с таблицей User. Мне нужно найти набор пользователей, соответствующих определенным критериям; например, он доступен со следующего четверга по пт, имеет навыки x / y / z и получил в среднем 4 оценки по всем своим завершенным контрактам.

Есть ли какой-нибудь способ сделать этот поиск эффективно, минимизируя количество раз, когда я попал в базу данных? Извините, если это очень новый вопрос.

Спасибо!

1 Ответ

1 голос
/ 14 декабря 2011

Не уверен, что этот метод решит вашу проблему во всех 4 случаях, но, по крайней мере, он должен помочь вам в первом - эффективный запрос данных пользователя.

Я обычно нахожу использование values или values_list функция запроса быстрее, потому что она сокращает часть SELECT фактического SQL, и, следовательно, вы получите результаты быстрее. Django docs относительно этого.

Также стоит отметить, что начиная с новой версии dev в values и values_list вы можете запрашивать любые типы отношений, включая many_to_one.

И, наконец, вы можете найти in_bulk также полезным.Если я делаю сложный запрос, вы можете попытаться запросить идентификаторы сначала для некоторых моделей, используя values или values_list, а затем используйте in_bulk, чтобы получить экземпляры модели быстрее. Django docs об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...