Please enable JavaScript.
Coggle requires JavaScript to display documents.
Queries In Details - Coggle Diagram
Queries In Details
-
Кешування QuerySet
Щоб зменшити кількість запитів до бази даних, кожен QuerySet має кеш.
У новоствореній змінній QuerySet'а кеш порожній. При першому виконанні QuerySet'а Django зберігає результати запиту в кеші змінної QuerySet'а і повертає ті результати, які були явно запитані.
Якщо ви не використовуєте кешування належним чином, це може вам дорого коштувати у ресурсах для обчислення.
Однак QuerySets не завжди зберігають свої результати. При обчисленні лише частини QuerySet перевіряється кеш, але якщо він не заповнений, то і ця частка елементів QuerySet, повернута наступним запитом, не потрапить до кешу. Тобто, це означає, що обмеження QuerySet за допомогою зрізу масиву або індексу не призведе до зберігання отриманих даних до кешу.Проте, кеш буде використано, якщо повний QuerySet вже було обчислено:
queryset = Student.objects.all()
[student for student in queryset] # Queries the database
print(queryset[2]) # Uses cache
print(queryset[2]) # Uses cache
N Plus 1 Problem
Select Related
Зверніть увагу: select_related() використовується тільки для зв'язків "один-до-одного" і "багато-до-одного". Він не працює зі зв'язком "багато-до-багатьох".
Prefetch Related
How to reduce the number of queries with “many-to-many” relationships? Here comes the prefetch_related().
-
-