ORM не нужно отслеживать выбранные строки, вместо этого он идентифицирует строки по их первичному ключу, чтобы определить, вставлять или обновлять (если вы не установили force_insert или force_update с помощью save ()).
Кто может прочитать об этом здесь: http://docs.djangoproject.com/en/1.2/ref/models/instances/#how-django-knows-to-update-vs-insert
При этом нет необходимости или даже возможности использовать модель «только для чтения», поскольку она не приведет к улучшению производительности.
Если вы хотите оптимизировать, есть некоторые шаги, которые вы можете попробовать (хотя только небольшие улучшения, поэтому вам, вероятно, не стоит оптимизировать, пока это действительно не нужно).
Например, позвоните querySet.exists()
resp,querySet.count()
вместо (bool)querySet
соотв.len(querySet)
если (и только если) вы не читаете из запроса, заданного впоследствии.В противном случае не используйте exist () / count (), так как он создаст дополнительный запрос, тогда как в последнем кеше фактическое чтение набора запросов бесплатное, поскольку оно уже кешируется.
Другая мера - использовать only () и defer (), чтобы ограничить SELECT полями, которые вам действительно нужны, и select_related () для предварительной выборки отношений внешнего ключа, если вы знаете, что они вам понадобятся.Если у вас есть большие модели с большим количеством связей и столбцов, это может значительно повысить производительность.