Оптимизация Django: массовое получение информации о модели ..? - PullRequest
0 голосов
/ 03 августа 2009

В представлении Django я делаю что-то вроде этого ..

lists = Stuff.objects.exclude(model2=None)
for alist in lists:                        
     if alist.model2.model3.id == target_id:
          addSomeStuff

Замедление происходит от перехода от модели (строки базы данных) к модели в операторе if.
На самом деле это занимает около секунды, когда списки содержат только около 486 элементов. Я считаю, что это медленно, потому что выполняется поиск 486 * 2 + 1 дБ. Если бы я где-то переписал это так, чтобы он захватил всю таблицу model2 и таблицу model3 одновременно, а затем просто отфильтровал там, это было бы попаданием в 3 дБ, я полагаю, что это пошло бы намного быстрее. Это разрушило бы все прелести, которые делает Джанго.

Есть ли какой-нибудь способ убедить django сделать что-то вроде поиска больших объемов данных, как это?

1 Ответ

5 голосов
/ 03 августа 2009

До

Stuff.objects.exclude(model2=None).select_related('model2')

и сделать

if alist.model2.model3_id == target_id

Это должно сократить его до 1 SQL-запроса.

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