[{"data":1,"prerenderedAt":11044},["ShallowReactive",2],{"navigation":3,"/models-and-databases/database-optimization":1016,"/models-and-databases/database-optimization-surround":11039},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":320,"body":1018,"description":1028,"extension":11034,"links":11035,"meta":11036,"navigation":1293,"path":321,"seo":11037,"stem":322,"__hash__":11038},"docs/07.models-and-databases/17.database-optimization.md",{"type":1019,"value":1020,"toc":11022},"minimark",[1021,1025,1029,1034,1039,3150,3154,4831,4835,4839,7261,7265,7269,11015,11018],[1022,1023,320],"h1",{"id":1024},"database-optimization",[1026,1027,1028],"p",{},"Database optimization is crucial for building scalable Django applications. Understanding how to identify performance bottlenecks, optimize queries, and implement efficient database patterns ensures your application can handle growth and maintain responsiveness.",[1030,1031,1033],"h2",{"id":1032},"query-optimization-fundamentals","Query Optimization Fundamentals",[1035,1036,1038],"h3",{"id":1037},"understanding-query-performance","Understanding Query Performance",[1040,1041,1046],"pre",{"className":1042,"code":1043,"language":1044,"meta":1045,"style":1045},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Enable query logging for development\n# settings.py\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'handlers': {\n        'console': {\n            'class': 'logging.StreamHandler',\n        },\n    },\n    'loggers': {\n        'django.db.backends': {\n            'handlers': ['console'],\n            'level': 'DEBUG',\n            'propagate': False,\n        },\n    },\n}\n\n# Query analysis tools\nfrom django.db import connection\nfrom django.conf import settings\nimport time\n\nclass QueryAnalyzer:\n    \"\"\"Analyze and optimize database queries\"\"\"\n    \n    @staticmethod\n    def analyze_queries(func):\n        \"\"\"Decorator to analyze queries executed by a function\"\"\"\n        \n        def wrapper(*args, **kwargs):\n            # Reset query log\n            connection.queries_log.clear()\n            \n            start_time = time.time()\n            result = func(*args, **kwargs)\n            end_time = time.time()\n            \n            # Analyze queries\n            total_queries = len(connection.queries)\n            total_time = sum(float(q['time']) for q in connection.queries)\n            \n            print(f\"\\n=== Query Analysis for {func.__name__} ===\")\n            print(f\"Total queries: {total_queries}\")\n            print(f\"Total time: {total_time:.4f}s\")\n            print(f\"Function time: {end_time - start_time:.4f}s\")\n            \n            # Show slow queries\n            slow_queries = [q for q in connection.queries if float(q['time']) > 0.01]\n            if slow_queries:\n                print(f\"\\nSlow queries ({len(slow_queries)}):\")\n                for i, query in enumerate(slow_queries, 1):\n                    print(f\"{i}. Time: {query['time']}s\")\n                    print(f\"   SQL: {query['sql'][:100]}...\")\n            \n            # Detect N+1 queries\n            similar_queries = {}\n            for query in connection.queries:\n                sql_pattern = query['sql'].split('WHERE')[0] if 'WHERE' in query['sql'] else query['sql']\n                similar_queries[sql_pattern] = similar_queries.get(sql_pattern, 0) + 1\n            \n            n_plus_one = {pattern: count for pattern, count in similar_queries.items() if count > 5}\n            if n_plus_one:\n                print(f\"\\nPotential N+1 queries:\")\n                for pattern, count in n_plus_one.items():\n                    print(f\"  {count}x: {pattern[:80]}...\")\n            \n            return result\n        \n        return wrapper\n    \n    @staticmethod\n    def explain_query(queryset):\n        \"\"\"Get query execution plan\"\"\"\n        \n        if connection.vendor == 'postgresql':\n            with connection.cursor() as cursor:\n                cursor.execute(f\"EXPLAIN ANALYZE {queryset.query}\")\n                return cursor.fetchall()\n        \n        elif connection.vendor == 'mysql':\n            with connection.cursor() as cursor:\n                cursor.execute(f\"EXPLAIN {queryset.query}\")\n                return cursor.fetchall()\n        \n        else:\n            return str(queryset.query)\n\n# Example usage\n@QueryAnalyzer.analyze_queries\ndef get_user_posts_inefficient(user_id):\n    \"\"\"Inefficient version with N+1 queries\"\"\"\n    \n    user = User.objects.get(id=user_id)\n    posts = Post.objects.filter(author=user)\n    \n    # This creates N+1 queries\n    result = []\n    for post in posts:\n        result.append({\n            'title': post.title,\n            'author_name': post.author.username,  # N+1 query here\n            'category': post.category.name,       # N+1 query here\n            'comment_count': post.comments.count()  # N+1 query here\n        })\n    \n    return result\n\n@QueryAnalyzer.analyze_queries\ndef get_user_posts_optimized(user_id):\n    \"\"\"Optimized version with proper prefetching\"\"\"\n    \n    posts = Post.objects.filter(author_id=user_id) \\\n                       .select_related('author', 'category') \\\n                       .prefetch_related('comments')\n    \n    result = []\n    for post in posts:\n        result.append({\n            'title': post.title,\n            'author_name': post.author.username,\n            'category': post.category.name,\n            'comment_count': post.comments.count()\n        })\n    \n    return result\n","python","",[1047,1048,1049,1058,1064,1078,1102,1120,1134,1149,1172,1178,1184,1198,1212,1235,1256,1272,1277,1282,1288,1295,1301,1324,1341,1349,1354,1367,1381,1387,1397,1417,1428,1434,1463,1469,1490,1496,1515,1541,1557,1562,1568,1592,1643,1648,1688,1711,1738,1769,1774,1780,1835,1846,1883,1912,1956,1996,2001,2007,2018,2036,2116,2156,2161,2213,2223,2241,2263,2303,2308,2317,2322,2331,2336,2343,2358,2368,2373,2398,2421,2453,2468,2473,2496,2515,2545,2558,2563,2571,2589,2594,2600,2614,2630,2640,2645,2677,2709,2714,2720,2731,2747,2761,2782,2810,2838,2865,2871,2876,2884,2889,2900,2914,2924,2929,2960,2989,3007,3012,3021,3034,3045,3064,3087,3110,3133,3138,3143],"code",{"__ignoreMap":1045},[1050,1051,1054],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s9Tkl","# Enable query logging for development\n",[1050,1059,1061],{"class":1052,"line":1060},2,[1050,1062,1063],{"class":1056},"# settings.py\n",[1050,1065,1067,1071,1075],{"class":1052,"line":1066},3,[1050,1068,1070],{"class":1069},"se3Ec","LOGGING",[1050,1072,1074],{"class":1073},"soVBu"," =",[1050,1076,1077],{"class":1073}," {\n",[1050,1079,1081,1085,1089,1092,1095,1099],{"class":1052,"line":1080},4,[1050,1082,1084],{"class":1083},"sbYkP","    '",[1050,1086,1088],{"class":1087},"sTbE_","version",[1050,1090,1091],{"class":1083},"'",[1050,1093,1094],{"class":1073},":",[1050,1096,1098],{"class":1097},"s7CZa"," 1",[1050,1100,1101],{"class":1073},",\n",[1050,1103,1105,1107,1110,1112,1114,1118],{"class":1052,"line":1104},5,[1050,1106,1084],{"class":1083},[1050,1108,1109],{"class":1087},"disable_existing_loggers",[1050,1111,1091],{"class":1083},[1050,1113,1094],{"class":1073},[1050,1115,1117],{"class":1116},"s8XtY"," False",[1050,1119,1101],{"class":1073},[1050,1121,1123,1125,1128,1130,1132],{"class":1052,"line":1122},6,[1050,1124,1084],{"class":1083},[1050,1126,1127],{"class":1087},"handlers",[1050,1129,1091],{"class":1083},[1050,1131,1094],{"class":1073},[1050,1133,1077],{"class":1073},[1050,1135,1137,1140,1143,1145,1147],{"class":1052,"line":1136},7,[1050,1138,1139],{"class":1083},"        '",[1050,1141,1142],{"class":1087},"console",[1050,1144,1091],{"class":1083},[1050,1146,1094],{"class":1073},[1050,1148,1077],{"class":1073},[1050,1150,1152,1155,1158,1160,1162,1165,1168,1170],{"class":1052,"line":1151},8,[1050,1153,1154],{"class":1083},"            '",[1050,1156,1157],{"class":1087},"class",[1050,1159,1091],{"class":1083},[1050,1161,1094],{"class":1073},[1050,1163,1164],{"class":1083}," '",[1050,1166,1167],{"class":1087},"logging.StreamHandler",[1050,1169,1091],{"class":1083},[1050,1171,1101],{"class":1073},[1050,1173,1175],{"class":1052,"line":1174},9,[1050,1176,1177],{"class":1073},"        },\n",[1050,1179,1181],{"class":1052,"line":1180},10,[1050,1182,1183],{"class":1073},"    },\n",[1050,1185,1187,1189,1192,1194,1196],{"class":1052,"line":1186},11,[1050,1188,1084],{"class":1083},[1050,1190,1191],{"class":1087},"loggers",[1050,1193,1091],{"class":1083},[1050,1195,1094],{"class":1073},[1050,1197,1077],{"class":1073},[1050,1199,1201,1203,1206,1208,1210],{"class":1052,"line":1200},12,[1050,1202,1139],{"class":1083},[1050,1204,1205],{"class":1087},"django.db.backends",[1050,1207,1091],{"class":1083},[1050,1209,1094],{"class":1073},[1050,1211,1077],{"class":1073},[1050,1213,1215,1217,1219,1221,1223,1226,1228,1230,1232],{"class":1052,"line":1214},13,[1050,1216,1154],{"class":1083},[1050,1218,1127],{"class":1087},[1050,1220,1091],{"class":1083},[1050,1222,1094],{"class":1073},[1050,1224,1225],{"class":1073}," [",[1050,1227,1091],{"class":1083},[1050,1229,1142],{"class":1087},[1050,1231,1091],{"class":1083},[1050,1233,1234],{"class":1073},"],\n",[1050,1236,1238,1240,1243,1245,1247,1249,1252,1254],{"class":1052,"line":1237},14,[1050,1239,1154],{"class":1083},[1050,1241,1242],{"class":1087},"level",[1050,1244,1091],{"class":1083},[1050,1246,1094],{"class":1073},[1050,1248,1164],{"class":1083},[1050,1250,1251],{"class":1087},"DEBUG",[1050,1253,1091],{"class":1083},[1050,1255,1101],{"class":1073},[1050,1257,1259,1261,1264,1266,1268,1270],{"class":1052,"line":1258},15,[1050,1260,1154],{"class":1083},[1050,1262,1263],{"class":1087},"propagate",[1050,1265,1091],{"class":1083},[1050,1267,1094],{"class":1073},[1050,1269,1117],{"class":1116},[1050,1271,1101],{"class":1073},[1050,1273,1275],{"class":1052,"line":1274},16,[1050,1276,1177],{"class":1073},[1050,1278,1280],{"class":1052,"line":1279},17,[1050,1281,1183],{"class":1073},[1050,1283,1285],{"class":1052,"line":1284},18,[1050,1286,1287],{"class":1073},"}\n",[1050,1289,1291],{"class":1052,"line":1290},19,[1050,1292,1294],{"emptyLinePlaceholder":1293},true,"\n",[1050,1296,1298],{"class":1052,"line":1297},20,[1050,1299,1300],{"class":1056},"# Query analysis tools\n",[1050,1302,1304,1308,1312,1315,1318,1321],{"class":1052,"line":1303},21,[1050,1305,1307],{"class":1306},"siDh9","from",[1050,1309,1311],{"class":1310},"sftqT"," django",[1050,1313,1314],{"class":1073},".",[1050,1316,1317],{"class":1310},"db ",[1050,1319,1320],{"class":1306},"import",[1050,1322,1323],{"class":1310}," connection\n",[1050,1325,1327,1329,1331,1333,1336,1338],{"class":1052,"line":1326},22,[1050,1328,1307],{"class":1306},[1050,1330,1311],{"class":1310},[1050,1332,1314],{"class":1073},[1050,1334,1335],{"class":1310},"conf ",[1050,1337,1320],{"class":1306},[1050,1339,1340],{"class":1310}," settings\n",[1050,1342,1344,1346],{"class":1052,"line":1343},23,[1050,1345,1320],{"class":1306},[1050,1347,1348],{"class":1310}," time\n",[1050,1350,1352],{"class":1052,"line":1351},24,[1050,1353,1294],{"emptyLinePlaceholder":1293},[1050,1355,1357,1360,1364],{"class":1052,"line":1356},25,[1050,1358,1157],{"class":1359},"s5Kfy",[1050,1361,1363],{"class":1362},"sD-vU"," QueryAnalyzer",[1050,1365,1366],{"class":1073},":\n",[1050,1368,1370,1374,1378],{"class":1052,"line":1369},26,[1050,1371,1373],{"class":1372},"sm7ve","    \"\"\"",[1050,1375,1377],{"class":1376},"sVyVU","Analyze and optimize database queries",[1050,1379,1380],{"class":1372},"\"\"\"\n",[1050,1382,1384],{"class":1052,"line":1383},27,[1050,1385,1386],{"class":1310},"    \n",[1050,1388,1390,1393],{"class":1052,"line":1389},28,[1050,1391,1392],{"class":1073},"    @",[1050,1394,1396],{"class":1395},"sa2tF","staticmethod\n",[1050,1398,1400,1403,1407,1410,1414],{"class":1052,"line":1399},29,[1050,1401,1402],{"class":1359},"    def",[1050,1404,1406],{"class":1405},"sljsM"," analyze_queries",[1050,1408,1409],{"class":1073},"(",[1050,1411,1413],{"class":1412},"sCyAa","func",[1050,1415,1416],{"class":1073},"):\n",[1050,1418,1420,1423,1426],{"class":1052,"line":1419},30,[1050,1421,1422],{"class":1372},"        \"\"\"",[1050,1424,1425],{"class":1376},"Decorator to analyze queries executed by a function",[1050,1427,1380],{"class":1372},[1050,1429,1431],{"class":1052,"line":1430},31,[1050,1432,1433],{"class":1310},"        \n",[1050,1435,1437,1440,1443,1445,1449,1452,1455,1458,1461],{"class":1052,"line":1436},32,[1050,1438,1439],{"class":1359},"        def",[1050,1441,1442],{"class":1405}," wrapper",[1050,1444,1409],{"class":1073},[1050,1446,1448],{"class":1447},"sVsLi","*",[1050,1450,1451],{"class":1412},"args",[1050,1453,1454],{"class":1073},",",[1050,1456,1457],{"class":1447}," **",[1050,1459,1460],{"class":1412},"kwargs",[1050,1462,1416],{"class":1073},[1050,1464,1466],{"class":1052,"line":1465},33,[1050,1467,1468],{"class":1056},"            # Reset query log\n",[1050,1470,1472,1475,1477,1481,1483,1487],{"class":1052,"line":1471},34,[1050,1473,1474],{"class":1310},"            connection",[1050,1476,1314],{"class":1073},[1050,1478,1480],{"class":1479},"sBPpx","queries_log",[1050,1482,1314],{"class":1073},[1050,1484,1486],{"class":1485},"siWMO","clear",[1050,1488,1489],{"class":1073},"()\n",[1050,1491,1493],{"class":1052,"line":1492},35,[1050,1494,1495],{"class":1310},"            \n",[1050,1497,1499,1502,1505,1508,1510,1513],{"class":1052,"line":1498},36,[1050,1500,1501],{"class":1310},"            start_time ",[1050,1503,1504],{"class":1073},"=",[1050,1506,1507],{"class":1310}," time",[1050,1509,1314],{"class":1073},[1050,1511,1512],{"class":1485},"time",[1050,1514,1489],{"class":1073},[1050,1516,1518,1521,1523,1526,1528,1530,1532,1534,1536,1538],{"class":1052,"line":1517},37,[1050,1519,1520],{"class":1310},"            result ",[1050,1522,1504],{"class":1073},[1050,1524,1525],{"class":1485}," func",[1050,1527,1409],{"class":1073},[1050,1529,1448],{"class":1447},[1050,1531,1451],{"class":1485},[1050,1533,1454],{"class":1073},[1050,1535,1457],{"class":1447},[1050,1537,1460],{"class":1485},[1050,1539,1540],{"class":1073},")\n",[1050,1542,1544,1547,1549,1551,1553,1555],{"class":1052,"line":1543},38,[1050,1545,1546],{"class":1310},"            end_time ",[1050,1548,1504],{"class":1073},[1050,1550,1507],{"class":1310},[1050,1552,1314],{"class":1073},[1050,1554,1512],{"class":1485},[1050,1556,1489],{"class":1073},[1050,1558,1560],{"class":1052,"line":1559},39,[1050,1561,1495],{"class":1310},[1050,1563,1565],{"class":1052,"line":1564},40,[1050,1566,1567],{"class":1056},"            # Analyze queries\n",[1050,1569,1571,1574,1576,1580,1582,1585,1587,1590],{"class":1052,"line":1570},41,[1050,1572,1573],{"class":1310},"            total_queries ",[1050,1575,1504],{"class":1073},[1050,1577,1579],{"class":1578},"sJdAF"," len",[1050,1581,1409],{"class":1073},[1050,1583,1584],{"class":1485},"connection",[1050,1586,1314],{"class":1073},[1050,1588,1589],{"class":1479},"queries",[1050,1591,1540],{"class":1073},[1050,1593,1595,1598,1600,1603,1605,1608,1610,1613,1616,1618,1620,1622,1625,1628,1631,1634,1637,1639,1641],{"class":1052,"line":1594},42,[1050,1596,1597],{"class":1310},"            total_time ",[1050,1599,1504],{"class":1073},[1050,1601,1602],{"class":1578}," sum",[1050,1604,1409],{"class":1073},[1050,1606,1607],{"class":1395},"float",[1050,1609,1409],{"class":1073},[1050,1611,1612],{"class":1485},"q",[1050,1614,1615],{"class":1073},"[",[1050,1617,1091],{"class":1083},[1050,1619,1512],{"class":1087},[1050,1621,1091],{"class":1083},[1050,1623,1624],{"class":1073},"])",[1050,1626,1627],{"class":1306}," for",[1050,1629,1630],{"class":1485}," q ",[1050,1632,1633],{"class":1306},"in",[1050,1635,1636],{"class":1485}," connection",[1050,1638,1314],{"class":1073},[1050,1640,1589],{"class":1479},[1050,1642,1540],{"class":1073},[1050,1644,1646],{"class":1052,"line":1645},43,[1050,1647,1495],{"class":1310},[1050,1649,1651,1654,1656,1659,1662,1665,1668,1672,1674,1676,1680,1683,1686],{"class":1052,"line":1650},44,[1050,1652,1653],{"class":1578},"            print",[1050,1655,1409],{"class":1073},[1050,1657,1658],{"class":1359},"f",[1050,1660,1661],{"class":1087},"\"",[1050,1663,1664],{"class":1069},"\\n",[1050,1666,1667],{"class":1087},"=== Query Analysis for ",[1050,1669,1671],{"class":1670},"s3h35","{",[1050,1673,1413],{"class":1485},[1050,1675,1314],{"class":1073},[1050,1677,1679],{"class":1678},"s131V","__name__",[1050,1681,1682],{"class":1670},"}",[1050,1684,1685],{"class":1087}," ===\"",[1050,1687,1540],{"class":1073},[1050,1689,1691,1693,1695,1697,1700,1702,1705,1707,1709],{"class":1052,"line":1690},45,[1050,1692,1653],{"class":1578},[1050,1694,1409],{"class":1073},[1050,1696,1658],{"class":1359},[1050,1698,1699],{"class":1087},"\"Total queries: ",[1050,1701,1671],{"class":1670},[1050,1703,1704],{"class":1485},"total_queries",[1050,1706,1682],{"class":1670},[1050,1708,1661],{"class":1087},[1050,1710,1540],{"class":1073},[1050,1712,1714,1716,1718,1720,1723,1725,1728,1731,1733,1736],{"class":1052,"line":1713},46,[1050,1715,1653],{"class":1578},[1050,1717,1409],{"class":1073},[1050,1719,1658],{"class":1359},[1050,1721,1722],{"class":1087},"\"Total time: ",[1050,1724,1671],{"class":1670},[1050,1726,1727],{"class":1485},"total_time",[1050,1729,1730],{"class":1359},":.4f",[1050,1732,1682],{"class":1670},[1050,1734,1735],{"class":1087},"s\"",[1050,1737,1540],{"class":1073},[1050,1739,1741,1743,1745,1747,1750,1752,1755,1758,1761,1763,1765,1767],{"class":1052,"line":1740},47,[1050,1742,1653],{"class":1578},[1050,1744,1409],{"class":1073},[1050,1746,1658],{"class":1359},[1050,1748,1749],{"class":1087},"\"Function time: ",[1050,1751,1671],{"class":1670},[1050,1753,1754],{"class":1485},"end_time ",[1050,1756,1757],{"class":1447},"-",[1050,1759,1760],{"class":1485}," start_time",[1050,1762,1730],{"class":1359},[1050,1764,1682],{"class":1670},[1050,1766,1735],{"class":1087},[1050,1768,1540],{"class":1073},[1050,1770,1772],{"class":1052,"line":1771},48,[1050,1773,1495],{"class":1310},[1050,1775,1777],{"class":1052,"line":1776},49,[1050,1778,1779],{"class":1056},"            # Show slow queries\n",[1050,1781,1783,1786,1788,1790,1793,1796,1798,1800,1802,1804,1806,1809,1812,1814,1816,1818,1820,1822,1824,1826,1829,1832],{"class":1052,"line":1782},50,[1050,1784,1785],{"class":1310},"            slow_queries ",[1050,1787,1504],{"class":1073},[1050,1789,1225],{"class":1073},[1050,1791,1792],{"class":1310},"q ",[1050,1794,1795],{"class":1306},"for",[1050,1797,1630],{"class":1310},[1050,1799,1633],{"class":1306},[1050,1801,1636],{"class":1310},[1050,1803,1314],{"class":1073},[1050,1805,1589],{"class":1479},[1050,1807,1808],{"class":1306}," if",[1050,1810,1811],{"class":1395}," float",[1050,1813,1409],{"class":1073},[1050,1815,1612],{"class":1485},[1050,1817,1615],{"class":1073},[1050,1819,1091],{"class":1083},[1050,1821,1512],{"class":1087},[1050,1823,1091],{"class":1083},[1050,1825,1624],{"class":1073},[1050,1827,1828],{"class":1447}," >",[1050,1830,1831],{"class":1097}," 0.01",[1050,1833,1834],{"class":1073},"]\n",[1050,1836,1838,1841,1844],{"class":1052,"line":1837},51,[1050,1839,1840],{"class":1306},"            if",[1050,1842,1843],{"class":1310}," slow_queries",[1050,1845,1366],{"class":1073},[1050,1847,1849,1852,1854,1856,1858,1860,1863,1865,1868,1870,1873,1876,1878,1881],{"class":1052,"line":1848},52,[1050,1850,1851],{"class":1578},"                print",[1050,1853,1409],{"class":1073},[1050,1855,1658],{"class":1359},[1050,1857,1661],{"class":1087},[1050,1859,1664],{"class":1069},[1050,1861,1862],{"class":1087},"Slow queries (",[1050,1864,1671],{"class":1670},[1050,1866,1867],{"class":1578},"len",[1050,1869,1409],{"class":1073},[1050,1871,1872],{"class":1485},"slow_queries",[1050,1874,1875],{"class":1073},")",[1050,1877,1682],{"class":1670},[1050,1879,1880],{"class":1087},"):\"",[1050,1882,1540],{"class":1073},[1050,1884,1886,1889,1892,1894,1897,1899,1902,1904,1906,1908,1910],{"class":1052,"line":1885},53,[1050,1887,1888],{"class":1306},"                for",[1050,1890,1891],{"class":1310}," i",[1050,1893,1454],{"class":1073},[1050,1895,1896],{"class":1310}," query ",[1050,1898,1633],{"class":1306},[1050,1900,1901],{"class":1578}," enumerate",[1050,1903,1409],{"class":1073},[1050,1905,1872],{"class":1485},[1050,1907,1454],{"class":1073},[1050,1909,1098],{"class":1097},[1050,1911,1416],{"class":1073},[1050,1913,1915,1918,1920,1922,1924,1926,1929,1931,1934,1936,1939,1941,1943,1945,1947,1950,1952,1954],{"class":1052,"line":1914},54,[1050,1916,1917],{"class":1578},"                    print",[1050,1919,1409],{"class":1073},[1050,1921,1658],{"class":1359},[1050,1923,1661],{"class":1087},[1050,1925,1671],{"class":1670},[1050,1927,1928],{"class":1485},"i",[1050,1930,1682],{"class":1670},[1050,1932,1933],{"class":1087},". Time: ",[1050,1935,1671],{"class":1670},[1050,1937,1938],{"class":1485},"query",[1050,1940,1615],{"class":1073},[1050,1942,1091],{"class":1083},[1050,1944,1512],{"class":1087},[1050,1946,1091],{"class":1083},[1050,1948,1949],{"class":1073},"]",[1050,1951,1682],{"class":1670},[1050,1953,1735],{"class":1087},[1050,1955,1540],{"class":1073},[1050,1957,1959,1961,1963,1965,1968,1970,1972,1974,1976,1979,1981,1984,1987,1989,1991,1994],{"class":1052,"line":1958},55,[1050,1960,1917],{"class":1578},[1050,1962,1409],{"class":1073},[1050,1964,1658],{"class":1359},[1050,1966,1967],{"class":1087},"\"   SQL: ",[1050,1969,1671],{"class":1670},[1050,1971,1938],{"class":1485},[1050,1973,1615],{"class":1073},[1050,1975,1091],{"class":1083},[1050,1977,1978],{"class":1087},"sql",[1050,1980,1091],{"class":1083},[1050,1982,1983],{"class":1073},"][:",[1050,1985,1986],{"class":1097},"100",[1050,1988,1949],{"class":1073},[1050,1990,1682],{"class":1670},[1050,1992,1993],{"class":1087},"...\"",[1050,1995,1540],{"class":1073},[1050,1997,1999],{"class":1052,"line":1998},56,[1050,2000,1495],{"class":1310},[1050,2002,2004],{"class":1052,"line":2003},57,[1050,2005,2006],{"class":1056},"            # Detect N+1 queries\n",[1050,2008,2010,2013,2015],{"class":1052,"line":2009},58,[1050,2011,2012],{"class":1310},"            similar_queries ",[1050,2014,1504],{"class":1073},[1050,2016,2017],{"class":1073}," {}\n",[1050,2019,2021,2024,2026,2028,2030,2032,2034],{"class":1052,"line":2020},59,[1050,2022,2023],{"class":1306},"            for",[1050,2025,1896],{"class":1310},[1050,2027,1633],{"class":1306},[1050,2029,1636],{"class":1310},[1050,2031,1314],{"class":1073},[1050,2033,1589],{"class":1479},[1050,2035,1366],{"class":1073},[1050,2037,2039,2042,2044,2047,2049,2051,2053,2055,2058,2061,2063,2065,2068,2070,2073,2076,2078,2080,2082,2084,2086,2089,2091,2093,2095,2097,2099,2101,2104,2106,2108,2110,2112,2114],{"class":1052,"line":2038},60,[1050,2040,2041],{"class":1310},"                sql_pattern ",[1050,2043,1504],{"class":1073},[1050,2045,2046],{"class":1310}," query",[1050,2048,1615],{"class":1073},[1050,2050,1091],{"class":1083},[1050,2052,1978],{"class":1087},[1050,2054,1091],{"class":1083},[1050,2056,2057],{"class":1073},"].",[1050,2059,2060],{"class":1485},"split",[1050,2062,1409],{"class":1073},[1050,2064,1091],{"class":1083},[1050,2066,2067],{"class":1087},"WHERE",[1050,2069,1091],{"class":1083},[1050,2071,2072],{"class":1073},")[",[1050,2074,2075],{"class":1097},"0",[1050,2077,1949],{"class":1073},[1050,2079,1808],{"class":1306},[1050,2081,1164],{"class":1083},[1050,2083,2067],{"class":1087},[1050,2085,1091],{"class":1083},[1050,2087,2088],{"class":1447}," in",[1050,2090,2046],{"class":1310},[1050,2092,1615],{"class":1073},[1050,2094,1091],{"class":1083},[1050,2096,1978],{"class":1087},[1050,2098,1091],{"class":1083},[1050,2100,1949],{"class":1073},[1050,2102,2103],{"class":1306}," else",[1050,2105,2046],{"class":1310},[1050,2107,1615],{"class":1073},[1050,2109,1091],{"class":1083},[1050,2111,1978],{"class":1087},[1050,2113,1091],{"class":1083},[1050,2115,1834],{"class":1073},[1050,2117,2119,2122,2124,2127,2129,2131,2134,2136,2139,2141,2143,2145,2148,2150,2153],{"class":1052,"line":2118},61,[1050,2120,2121],{"class":1310},"                similar_queries",[1050,2123,1615],{"class":1073},[1050,2125,2126],{"class":1310},"sql_pattern",[1050,2128,1949],{"class":1073},[1050,2130,1074],{"class":1073},[1050,2132,2133],{"class":1310}," similar_queries",[1050,2135,1314],{"class":1073},[1050,2137,2138],{"class":1485},"get",[1050,2140,1409],{"class":1073},[1050,2142,2126],{"class":1485},[1050,2144,1454],{"class":1073},[1050,2146,2147],{"class":1097}," 0",[1050,2149,1875],{"class":1073},[1050,2151,2152],{"class":1447}," +",[1050,2154,2155],{"class":1097}," 1\n",[1050,2157,2159],{"class":1052,"line":2158},62,[1050,2160,1495],{"class":1310},[1050,2162,2164,2167,2169,2172,2175,2177,2180,2182,2185,2187,2189,2191,2193,2195,2198,2201,2203,2205,2208,2211],{"class":1052,"line":2163},63,[1050,2165,2166],{"class":1310},"            n_plus_one ",[1050,2168,1504],{"class":1073},[1050,2170,2171],{"class":1073}," {",[1050,2173,2174],{"class":1310},"pattern",[1050,2176,1094],{"class":1073},[1050,2178,2179],{"class":1310}," count ",[1050,2181,1795],{"class":1306},[1050,2183,2184],{"class":1310}," pattern",[1050,2186,1454],{"class":1073},[1050,2188,2179],{"class":1310},[1050,2190,1633],{"class":1306},[1050,2192,2133],{"class":1310},[1050,2194,1314],{"class":1073},[1050,2196,2197],{"class":1485},"items",[1050,2199,2200],{"class":1073},"()",[1050,2202,1808],{"class":1306},[1050,2204,2179],{"class":1310},[1050,2206,2207],{"class":1447},">",[1050,2209,2210],{"class":1097}," 5",[1050,2212,1287],{"class":1073},[1050,2214,2216,2218,2221],{"class":1052,"line":2215},64,[1050,2217,1840],{"class":1306},[1050,2219,2220],{"class":1310}," n_plus_one",[1050,2222,1366],{"class":1073},[1050,2224,2226,2228,2230,2232,2234,2236,2239],{"class":1052,"line":2225},65,[1050,2227,1851],{"class":1578},[1050,2229,1409],{"class":1073},[1050,2231,1658],{"class":1359},[1050,2233,1661],{"class":1087},[1050,2235,1664],{"class":1069},[1050,2237,2238],{"class":1087},"Potential N+1 queries:\"",[1050,2240,1540],{"class":1073},[1050,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260],{"class":1052,"line":2243},66,[1050,2245,1888],{"class":1306},[1050,2247,2184],{"class":1310},[1050,2249,1454],{"class":1073},[1050,2251,2179],{"class":1310},[1050,2253,1633],{"class":1306},[1050,2255,2220],{"class":1310},[1050,2257,1314],{"class":1073},[1050,2259,2197],{"class":1485},[1050,2261,2262],{"class":1073},"():\n",[1050,2264,2266,2268,2270,2272,2275,2277,2280,2282,2285,2287,2289,2292,2295,2297,2299,2301],{"class":1052,"line":2265},67,[1050,2267,1917],{"class":1578},[1050,2269,1409],{"class":1073},[1050,2271,1658],{"class":1359},[1050,2273,2274],{"class":1087},"\"  ",[1050,2276,1671],{"class":1670},[1050,2278,2279],{"class":1485},"count",[1050,2281,1682],{"class":1670},[1050,2283,2284],{"class":1087},"x: ",[1050,2286,1671],{"class":1670},[1050,2288,2174],{"class":1485},[1050,2290,2291],{"class":1073},"[:",[1050,2293,2294],{"class":1097},"80",[1050,2296,1949],{"class":1073},[1050,2298,1682],{"class":1670},[1050,2300,1993],{"class":1087},[1050,2302,1540],{"class":1073},[1050,2304,2306],{"class":1052,"line":2305},68,[1050,2307,1495],{"class":1310},[1050,2309,2311,2314],{"class":1052,"line":2310},69,[1050,2312,2313],{"class":1306},"            return",[1050,2315,2316],{"class":1310}," result\n",[1050,2318,2320],{"class":1052,"line":2319},70,[1050,2321,1433],{"class":1310},[1050,2323,2325,2328],{"class":1052,"line":2324},71,[1050,2326,2327],{"class":1306},"        return",[1050,2329,2330],{"class":1310}," wrapper\n",[1050,2332,2334],{"class":1052,"line":2333},72,[1050,2335,1386],{"class":1310},[1050,2337,2339,2341],{"class":1052,"line":2338},73,[1050,2340,1392],{"class":1073},[1050,2342,1396],{"class":1395},[1050,2344,2346,2348,2351,2353,2356],{"class":1052,"line":2345},74,[1050,2347,1402],{"class":1359},[1050,2349,2350],{"class":1405}," explain_query",[1050,2352,1409],{"class":1073},[1050,2354,2355],{"class":1412},"queryset",[1050,2357,1416],{"class":1073},[1050,2359,2361,2363,2366],{"class":1052,"line":2360},75,[1050,2362,1422],{"class":1372},[1050,2364,2365],{"class":1376},"Get query execution plan",[1050,2367,1380],{"class":1372},[1050,2369,2371],{"class":1052,"line":2370},76,[1050,2372,1433],{"class":1310},[1050,2374,2376,2379,2381,2383,2386,2389,2391,2394,2396],{"class":1052,"line":2375},77,[1050,2377,2378],{"class":1306},"        if",[1050,2380,1636],{"class":1310},[1050,2382,1314],{"class":1073},[1050,2384,2385],{"class":1479},"vendor",[1050,2387,2388],{"class":1447}," ==",[1050,2390,1164],{"class":1083},[1050,2392,2393],{"class":1087},"postgresql",[1050,2395,1091],{"class":1083},[1050,2397,1366],{"class":1073},[1050,2399,2401,2404,2406,2408,2411,2413,2416,2419],{"class":1052,"line":2400},78,[1050,2402,2403],{"class":1306},"            with",[1050,2405,1636],{"class":1310},[1050,2407,1314],{"class":1073},[1050,2409,2410],{"class":1485},"cursor",[1050,2412,2200],{"class":1073},[1050,2414,2415],{"class":1306}," as",[1050,2417,2418],{"class":1310}," cursor",[1050,2420,1366],{"class":1073},[1050,2422,2424,2427,2429,2432,2434,2436,2439,2441,2443,2445,2447,2449,2451],{"class":1052,"line":2423},79,[1050,2425,2426],{"class":1310},"                cursor",[1050,2428,1314],{"class":1073},[1050,2430,2431],{"class":1485},"execute",[1050,2433,1409],{"class":1073},[1050,2435,1658],{"class":1359},[1050,2437,2438],{"class":1087},"\"EXPLAIN ANALYZE ",[1050,2440,1671],{"class":1670},[1050,2442,2355],{"class":1485},[1050,2444,1314],{"class":1073},[1050,2446,1938],{"class":1479},[1050,2448,1682],{"class":1670},[1050,2450,1661],{"class":1087},[1050,2452,1540],{"class":1073},[1050,2454,2456,2459,2461,2463,2466],{"class":1052,"line":2455},80,[1050,2457,2458],{"class":1306},"                return",[1050,2460,2418],{"class":1310},[1050,2462,1314],{"class":1073},[1050,2464,2465],{"class":1485},"fetchall",[1050,2467,1489],{"class":1073},[1050,2469,2471],{"class":1052,"line":2470},81,[1050,2472,1433],{"class":1310},[1050,2474,2476,2479,2481,2483,2485,2487,2489,2492,2494],{"class":1052,"line":2475},82,[1050,2477,2478],{"class":1306},"        elif",[1050,2480,1636],{"class":1310},[1050,2482,1314],{"class":1073},[1050,2484,2385],{"class":1479},[1050,2486,2388],{"class":1447},[1050,2488,1164],{"class":1083},[1050,2490,2491],{"class":1087},"mysql",[1050,2493,1091],{"class":1083},[1050,2495,1366],{"class":1073},[1050,2497,2499,2501,2503,2505,2507,2509,2511,2513],{"class":1052,"line":2498},83,[1050,2500,2403],{"class":1306},[1050,2502,1636],{"class":1310},[1050,2504,1314],{"class":1073},[1050,2506,2410],{"class":1485},[1050,2508,2200],{"class":1073},[1050,2510,2415],{"class":1306},[1050,2512,2418],{"class":1310},[1050,2514,1366],{"class":1073},[1050,2516,2518,2520,2522,2524,2526,2528,2531,2533,2535,2537,2539,2541,2543],{"class":1052,"line":2517},84,[1050,2519,2426],{"class":1310},[1050,2521,1314],{"class":1073},[1050,2523,2431],{"class":1485},[1050,2525,1409],{"class":1073},[1050,2527,1658],{"class":1359},[1050,2529,2530],{"class":1087},"\"EXPLAIN ",[1050,2532,1671],{"class":1670},[1050,2534,2355],{"class":1485},[1050,2536,1314],{"class":1073},[1050,2538,1938],{"class":1479},[1050,2540,1682],{"class":1670},[1050,2542,1661],{"class":1087},[1050,2544,1540],{"class":1073},[1050,2546,2548,2550,2552,2554,2556],{"class":1052,"line":2547},85,[1050,2549,2458],{"class":1306},[1050,2551,2418],{"class":1310},[1050,2553,1314],{"class":1073},[1050,2555,2465],{"class":1485},[1050,2557,1489],{"class":1073},[1050,2559,2561],{"class":1052,"line":2560},86,[1050,2562,1433],{"class":1310},[1050,2564,2566,2569],{"class":1052,"line":2565},87,[1050,2567,2568],{"class":1306},"        else",[1050,2570,1366],{"class":1073},[1050,2572,2574,2576,2579,2581,2583,2585,2587],{"class":1052,"line":2573},88,[1050,2575,2313],{"class":1306},[1050,2577,2578],{"class":1395}," str",[1050,2580,1409],{"class":1073},[1050,2582,2355],{"class":1485},[1050,2584,1314],{"class":1073},[1050,2586,1938],{"class":1479},[1050,2588,1540],{"class":1073},[1050,2590,2592],{"class":1052,"line":2591},89,[1050,2593,1294],{"emptyLinePlaceholder":1293},[1050,2595,2597],{"class":1052,"line":2596},90,[1050,2598,2599],{"class":1056},"# Example usage\n",[1050,2601,2603,2606,2609,2611],{"class":1052,"line":2602},91,[1050,2604,2605],{"class":1073},"@",[1050,2607,2608],{"class":1405},"QueryAnalyzer",[1050,2610,1314],{"class":1073},[1050,2612,2613],{"class":1405},"analyze_queries\n",[1050,2615,2617,2620,2623,2625,2628],{"class":1052,"line":2616},92,[1050,2618,2619],{"class":1359},"def",[1050,2621,2622],{"class":1405}," get_user_posts_inefficient",[1050,2624,1409],{"class":1073},[1050,2626,2627],{"class":1412},"user_id",[1050,2629,1416],{"class":1073},[1050,2631,2633,2635,2638],{"class":1052,"line":2632},93,[1050,2634,1373],{"class":1372},[1050,2636,2637],{"class":1376},"Inefficient version with N+1 queries",[1050,2639,1380],{"class":1372},[1050,2641,2643],{"class":1052,"line":2642},94,[1050,2644,1386],{"class":1310},[1050,2646,2648,2651,2653,2656,2658,2661,2663,2665,2667,2671,2673,2675],{"class":1052,"line":2647},95,[1050,2649,2650],{"class":1310},"    user ",[1050,2652,1504],{"class":1073},[1050,2654,2655],{"class":1310}," User",[1050,2657,1314],{"class":1073},[1050,2659,2660],{"class":1479},"objects",[1050,2662,1314],{"class":1073},[1050,2664,2138],{"class":1485},[1050,2666,1409],{"class":1073},[1050,2668,2670],{"class":2669},"sqOPj","id",[1050,2672,1504],{"class":1073},[1050,2674,2627],{"class":1485},[1050,2676,1540],{"class":1073},[1050,2678,2680,2683,2685,2688,2690,2692,2694,2697,2699,2702,2704,2707],{"class":1052,"line":2679},96,[1050,2681,2682],{"class":1310},"    posts ",[1050,2684,1504],{"class":1073},[1050,2686,2687],{"class":1310}," Post",[1050,2689,1314],{"class":1073},[1050,2691,2660],{"class":1479},[1050,2693,1314],{"class":1073},[1050,2695,2696],{"class":1485},"filter",[1050,2698,1409],{"class":1073},[1050,2700,2701],{"class":2669},"author",[1050,2703,1504],{"class":1073},[1050,2705,2706],{"class":1485},"user",[1050,2708,1540],{"class":1073},[1050,2710,2712],{"class":1052,"line":2711},97,[1050,2713,1386],{"class":1310},[1050,2715,2717],{"class":1052,"line":2716},98,[1050,2718,2719],{"class":1056},"    # This creates N+1 queries\n",[1050,2721,2723,2726,2728],{"class":1052,"line":2722},99,[1050,2724,2725],{"class":1310},"    result ",[1050,2727,1504],{"class":1073},[1050,2729,2730],{"class":1073}," []\n",[1050,2732,2734,2737,2740,2742,2745],{"class":1052,"line":2733},100,[1050,2735,2736],{"class":1306},"    for",[1050,2738,2739],{"class":1310}," post ",[1050,2741,1633],{"class":1306},[1050,2743,2744],{"class":1310}," posts",[1050,2746,1366],{"class":1073},[1050,2748,2750,2753,2755,2758],{"class":1052,"line":2749},101,[1050,2751,2752],{"class":1310},"        result",[1050,2754,1314],{"class":1073},[1050,2756,2757],{"class":1485},"append",[1050,2759,2760],{"class":1073},"({\n",[1050,2762,2764,2766,2769,2771,2773,2776,2778,2780],{"class":1052,"line":2763},102,[1050,2765,1154],{"class":1083},[1050,2767,2768],{"class":1087},"title",[1050,2770,1091],{"class":1083},[1050,2772,1094],{"class":1073},[1050,2774,2775],{"class":1485}," post",[1050,2777,1314],{"class":1073},[1050,2779,2768],{"class":1479},[1050,2781,1101],{"class":1073},[1050,2783,2785,2787,2790,2792,2794,2796,2798,2800,2802,2805,2807],{"class":1052,"line":2784},103,[1050,2786,1154],{"class":1083},[1050,2788,2789],{"class":1087},"author_name",[1050,2791,1091],{"class":1083},[1050,2793,1094],{"class":1073},[1050,2795,2775],{"class":1485},[1050,2797,1314],{"class":1073},[1050,2799,2701],{"class":1479},[1050,2801,1314],{"class":1073},[1050,2803,2804],{"class":1479},"username",[1050,2806,1454],{"class":1073},[1050,2808,2809],{"class":1056},"  # N+1 query here\n",[1050,2811,2813,2815,2818,2820,2822,2824,2826,2828,2830,2833,2835],{"class":1052,"line":2812},104,[1050,2814,1154],{"class":1083},[1050,2816,2817],{"class":1087},"category",[1050,2819,1091],{"class":1083},[1050,2821,1094],{"class":1073},[1050,2823,2775],{"class":1485},[1050,2825,1314],{"class":1073},[1050,2827,2817],{"class":1479},[1050,2829,1314],{"class":1073},[1050,2831,2832],{"class":1479},"name",[1050,2834,1454],{"class":1073},[1050,2836,2837],{"class":1056},"       # N+1 query here\n",[1050,2839,2841,2843,2846,2848,2850,2852,2854,2857,2859,2861,2863],{"class":1052,"line":2840},105,[1050,2842,1154],{"class":1083},[1050,2844,2845],{"class":1087},"comment_count",[1050,2847,1091],{"class":1083},[1050,2849,1094],{"class":1073},[1050,2851,2775],{"class":1485},[1050,2853,1314],{"class":1073},[1050,2855,2856],{"class":1479},"comments",[1050,2858,1314],{"class":1073},[1050,2860,2279],{"class":1485},[1050,2862,2200],{"class":1073},[1050,2864,2809],{"class":1056},[1050,2866,2868],{"class":1052,"line":2867},106,[1050,2869,2870],{"class":1073},"        })\n",[1050,2872,2874],{"class":1052,"line":2873},107,[1050,2875,1386],{"class":1310},[1050,2877,2879,2882],{"class":1052,"line":2878},108,[1050,2880,2881],{"class":1306},"    return",[1050,2883,2316],{"class":1310},[1050,2885,2887],{"class":1052,"line":2886},109,[1050,2888,1294],{"emptyLinePlaceholder":1293},[1050,2890,2892,2894,2896,2898],{"class":1052,"line":2891},110,[1050,2893,2605],{"class":1073},[1050,2895,2608],{"class":1405},[1050,2897,1314],{"class":1073},[1050,2899,2613],{"class":1405},[1050,2901,2903,2905,2908,2910,2912],{"class":1052,"line":2902},111,[1050,2904,2619],{"class":1359},[1050,2906,2907],{"class":1405}," get_user_posts_optimized",[1050,2909,1409],{"class":1073},[1050,2911,2627],{"class":1412},[1050,2913,1416],{"class":1073},[1050,2915,2917,2919,2922],{"class":1052,"line":2916},112,[1050,2918,1373],{"class":1372},[1050,2920,2921],{"class":1376},"Optimized version with proper prefetching",[1050,2923,1380],{"class":1372},[1050,2925,2927],{"class":1052,"line":2926},113,[1050,2928,1386],{"class":1310},[1050,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2951,2953,2955,2957],{"class":1052,"line":2931},114,[1050,2933,2682],{"class":1310},[1050,2935,1504],{"class":1073},[1050,2937,2687],{"class":1310},[1050,2939,1314],{"class":1073},[1050,2941,2660],{"class":1479},[1050,2943,1314],{"class":1073},[1050,2945,2696],{"class":1485},[1050,2947,1409],{"class":1073},[1050,2949,2950],{"class":2669},"author_id",[1050,2952,1504],{"class":1073},[1050,2954,2627],{"class":1485},[1050,2956,1875],{"class":1073},[1050,2958,2959],{"class":1073}," \\\n",[1050,2961,2963,2966,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987],{"class":1052,"line":2962},115,[1050,2964,2965],{"class":1073},"                       .",[1050,2967,2968],{"class":1485},"select_related",[1050,2970,1409],{"class":1073},[1050,2972,1091],{"class":1083},[1050,2974,2701],{"class":1087},[1050,2976,1091],{"class":1083},[1050,2978,1454],{"class":1073},[1050,2980,1164],{"class":1083},[1050,2982,2817],{"class":1087},[1050,2984,1091],{"class":1083},[1050,2986,1875],{"class":1073},[1050,2988,2959],{"class":1073},[1050,2990,2992,2994,2997,2999,3001,3003,3005],{"class":1052,"line":2991},116,[1050,2993,2965],{"class":1073},[1050,2995,2996],{"class":1485},"prefetch_related",[1050,2998,1409],{"class":1073},[1050,3000,1091],{"class":1083},[1050,3002,2856],{"class":1087},[1050,3004,1091],{"class":1083},[1050,3006,1540],{"class":1073},[1050,3008,3010],{"class":1052,"line":3009},117,[1050,3011,1386],{"class":1310},[1050,3013,3015,3017,3019],{"class":1052,"line":3014},118,[1050,3016,2725],{"class":1310},[1050,3018,1504],{"class":1073},[1050,3020,2730],{"class":1073},[1050,3022,3024,3026,3028,3030,3032],{"class":1052,"line":3023},119,[1050,3025,2736],{"class":1306},[1050,3027,2739],{"class":1310},[1050,3029,1633],{"class":1306},[1050,3031,2744],{"class":1310},[1050,3033,1366],{"class":1073},[1050,3035,3037,3039,3041,3043],{"class":1052,"line":3036},120,[1050,3038,2752],{"class":1310},[1050,3040,1314],{"class":1073},[1050,3042,2757],{"class":1485},[1050,3044,2760],{"class":1073},[1050,3046,3048,3050,3052,3054,3056,3058,3060,3062],{"class":1052,"line":3047},121,[1050,3049,1154],{"class":1083},[1050,3051,2768],{"class":1087},[1050,3053,1091],{"class":1083},[1050,3055,1094],{"class":1073},[1050,3057,2775],{"class":1485},[1050,3059,1314],{"class":1073},[1050,3061,2768],{"class":1479},[1050,3063,1101],{"class":1073},[1050,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085],{"class":1052,"line":3066},122,[1050,3068,1154],{"class":1083},[1050,3070,2789],{"class":1087},[1050,3072,1091],{"class":1083},[1050,3074,1094],{"class":1073},[1050,3076,2775],{"class":1485},[1050,3078,1314],{"class":1073},[1050,3080,2701],{"class":1479},[1050,3082,1314],{"class":1073},[1050,3084,2804],{"class":1479},[1050,3086,1101],{"class":1073},[1050,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108],{"class":1052,"line":3089},123,[1050,3091,1154],{"class":1083},[1050,3093,2817],{"class":1087},[1050,3095,1091],{"class":1083},[1050,3097,1094],{"class":1073},[1050,3099,2775],{"class":1485},[1050,3101,1314],{"class":1073},[1050,3103,2817],{"class":1479},[1050,3105,1314],{"class":1073},[1050,3107,2832],{"class":1479},[1050,3109,1101],{"class":1073},[1050,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131],{"class":1052,"line":3112},124,[1050,3114,1154],{"class":1083},[1050,3116,2845],{"class":1087},[1050,3118,1091],{"class":1083},[1050,3120,1094],{"class":1073},[1050,3122,2775],{"class":1485},[1050,3124,1314],{"class":1073},[1050,3126,2856],{"class":1479},[1050,3128,1314],{"class":1073},[1050,3130,2279],{"class":1485},[1050,3132,1489],{"class":1073},[1050,3134,3136],{"class":1052,"line":3135},125,[1050,3137,2870],{"class":1073},[1050,3139,3141],{"class":1052,"line":3140},126,[1050,3142,1386],{"class":1310},[1050,3144,3146,3148],{"class":1052,"line":3145},127,[1050,3147,2881],{"class":1306},[1050,3149,2316],{"class":1310},[1035,3151,3153],{"id":3152},"select-related-and-prefetch-related-optimization","Select Related and Prefetch Related Optimization",[1040,3155,3157],{"className":1042,"code":3156,"language":1044,"meta":1045,"style":1045},"from django.db.models import Prefetch, Count\n\nclass OptimizedQueryPatterns:\n    \"\"\"Patterns for optimized database queries\"\"\"\n    \n    @staticmethod\n    def basic_select_related():\n        \"\"\"Basic select_related usage for foreign keys\"\"\"\n        \n        # Bad: N+1 queries\n        posts = Post.objects.all()\n        for post in posts:\n            print(f\"{post.title} by {post.author.username}\")  # Query per post\n        \n        # Good: Single query with JOIN\n        posts = Post.objects.select_related('author').all()\n        for post in posts:\n            print(f\"{post.title} by {post.author.username}\")  # No additional queries\n    \n    @staticmethod\n    def multi_level_select_related():\n        \"\"\"Multi-level select_related for nested relationships\"\"\"\n        \n        # Select related across multiple levels\n        posts = Post.objects.select_related(\n            'author',\n            'author__profile',\n            'category',\n            'category__parent'\n        ).all()\n        \n        for post in posts:\n            print(f\"{post.title} by {post.author.profile.full_name}\")\n            print(f\"Category: {post.category.parent.name} > {post.category.name}\")\n    \n    @staticmethod\n    def basic_prefetch_related():\n        \"\"\"Basic prefetch_related for many-to-many and reverse foreign keys\"\"\"\n        \n        # Bad: N+1 queries for tags\n        posts = Post.objects.all()\n        for post in posts:\n            tags = list(post.tags.all())  # Query per post\n        \n        # Good: Prefetch tags in separate query\n        posts = Post.objects.prefetch_related('tags').all()\n        for post in posts:\n            tags = list(post.tags.all())  # No additional queries\n    \n    @staticmethod\n    def custom_prefetch_related():\n        \"\"\"Custom prefetch with filtering and ordering\"\"\"\n        \n        # Prefetch only approved comments, ordered by date\n        posts = Post.objects.prefetch_related(\n            Prefetch(\n                'comments',\n                queryset=Comment.objects.filter(is_approved=True)\n                                       .select_related('author')\n                                       .order_by('-created_at')\n            )\n        ).all()\n        \n        for post in posts:\n            approved_comments = post.comments.all()  # Already filtered and ordered\n    \n    @staticmethod\n    def complex_prefetch_patterns():\n        \"\"\"Complex prefetch patterns for nested relationships\"\"\"\n        \n        # Prefetch posts with their comments and comment authors\n        authors = Author.objects.prefetch_related(\n            Prefetch(\n                'posts',\n                queryset=Post.objects.select_related('category')\n                                   .prefetch_related(\n                                       Prefetch(\n                                           'comments',\n                                           queryset=Comment.objects.select_related('author')\n                                                                  .filter(is_approved=True)\n                                       )\n                                   )\n            )\n        ).all()\n        \n        for author in authors:\n            for post in author.posts.all():\n                print(f\"Post: {post.title} in {post.category.name}\")\n                for comment in post.comments.all():\n                    print(f\"  Comment by {comment.author.username}\")\n    \n    @staticmethod\n    def conditional_prefetch():\n        \"\"\"Conditional prefetching based on user permissions\"\"\"\n        \n        def get_posts_for_user(user):\n            \"\"\"Get posts with appropriate prefetching based on user role\"\"\"\n            \n            base_queryset = Post.objects.select_related('author', 'category')\n            \n            if user.is_staff:\n                # Staff can see all comments\n                return base_queryset.prefetch_related('comments__author')\n            else:\n                # Regular users only see approved comments\n                return base_queryset.prefetch_related(\n                    Prefetch(\n                        'comments',\n                        queryset=Comment.objects.filter(is_approved=True)\n                                               .select_related('author')\n                    )\n                )\n    \n    @staticmethod\n    def optimized_aggregation_queries():\n        \"\"\"Optimize queries with aggregations\"\"\"\n        \n        # Bad: Multiple queries for counts\n        posts = Post.objects.all()\n        for post in posts:\n            comment_count = post.comments.count()  # Query per post\n            like_count = post.likes.count()        # Query per post\n        \n        # Good: Annotate with counts\n        posts = Post.objects.annotate(\n            comment_count=Count('comments'),\n            like_count=Count('likes')\n        ).select_related('author', 'category')\n        \n        for post in posts:\n            print(f\"{post.title}: {post.comment_count} comments, {post.like_count} likes\")\n",[1047,3158,3159,3185,3189,3198,3207,3211,3217,3226,3235,3239,3244,3264,3277,3322,3326,3331,3362,3374,3417,3421,3427,3436,3445,3449,3454,3473,3483,3494,3504,3514,3523,3527,3539,3585,3636,3640,3646,3655,3664,3668,3673,3691,3703,3731,3735,3740,3770,3782,3806,3810,3816,3825,3834,3838,3843,3861,3868,3879,3909,3926,3944,3949,3957,3961,3973,3995,3999,4005,4014,4023,4027,4032,4052,4058,4069,4096,4105,4112,4123,4150,4167,4172,4177,4181,4189,4193,4207,4228,4270,4291,4321,4325,4331,4340,4349,4353,4366,4376,4380,4415,4419,4433,4438,4460,4467,4472,4484,4491,4502,4529,4546,4551,4556,4560,4566,4575,4584,4588,4593,4611,4623,4644,4667,4671,4676,4695,4716,4735,4760,4765,4778],{"__ignoreMap":1045},[1050,3160,3161,3163,3165,3167,3170,3172,3175,3177,3180,3182],{"class":1052,"line":1053},[1050,3162,1307],{"class":1306},[1050,3164,1311],{"class":1310},[1050,3166,1314],{"class":1073},[1050,3168,3169],{"class":1310},"db",[1050,3171,1314],{"class":1073},[1050,3173,3174],{"class":1310},"models ",[1050,3176,1320],{"class":1306},[1050,3178,3179],{"class":1310}," Prefetch",[1050,3181,1454],{"class":1073},[1050,3183,3184],{"class":1310}," Count\n",[1050,3186,3187],{"class":1052,"line":1060},[1050,3188,1294],{"emptyLinePlaceholder":1293},[1050,3190,3191,3193,3196],{"class":1052,"line":1066},[1050,3192,1157],{"class":1359},[1050,3194,3195],{"class":1362}," OptimizedQueryPatterns",[1050,3197,1366],{"class":1073},[1050,3199,3200,3202,3205],{"class":1052,"line":1080},[1050,3201,1373],{"class":1372},[1050,3203,3204],{"class":1376},"Patterns for optimized database queries",[1050,3206,1380],{"class":1372},[1050,3208,3209],{"class":1052,"line":1104},[1050,3210,1386],{"class":1310},[1050,3212,3213,3215],{"class":1052,"line":1122},[1050,3214,1392],{"class":1073},[1050,3216,1396],{"class":1395},[1050,3218,3219,3221,3224],{"class":1052,"line":1136},[1050,3220,1402],{"class":1359},[1050,3222,3223],{"class":1405}," basic_select_related",[1050,3225,2262],{"class":1073},[1050,3227,3228,3230,3233],{"class":1052,"line":1151},[1050,3229,1422],{"class":1372},[1050,3231,3232],{"class":1376},"Basic select_related usage for foreign keys",[1050,3234,1380],{"class":1372},[1050,3236,3237],{"class":1052,"line":1174},[1050,3238,1433],{"class":1310},[1050,3240,3241],{"class":1052,"line":1180},[1050,3242,3243],{"class":1056},"        # Bad: N+1 queries\n",[1050,3245,3246,3249,3251,3253,3255,3257,3259,3262],{"class":1052,"line":1186},[1050,3247,3248],{"class":1310},"        posts ",[1050,3250,1504],{"class":1073},[1050,3252,2687],{"class":1310},[1050,3254,1314],{"class":1073},[1050,3256,2660],{"class":1479},[1050,3258,1314],{"class":1073},[1050,3260,3261],{"class":1485},"all",[1050,3263,1489],{"class":1073},[1050,3265,3266,3269,3271,3273,3275],{"class":1052,"line":1200},[1050,3267,3268],{"class":1306},"        for",[1050,3270,2739],{"class":1310},[1050,3272,1633],{"class":1306},[1050,3274,2744],{"class":1310},[1050,3276,1366],{"class":1073},[1050,3278,3279,3281,3283,3285,3287,3289,3292,3294,3296,3298,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319],{"class":1052,"line":1214},[1050,3280,1653],{"class":1578},[1050,3282,1409],{"class":1073},[1050,3284,1658],{"class":1359},[1050,3286,1661],{"class":1087},[1050,3288,1671],{"class":1670},[1050,3290,3291],{"class":1485},"post",[1050,3293,1314],{"class":1073},[1050,3295,2768],{"class":1479},[1050,3297,1682],{"class":1670},[1050,3299,3300],{"class":1087}," by ",[1050,3302,1671],{"class":1670},[1050,3304,3291],{"class":1485},[1050,3306,1314],{"class":1073},[1050,3308,2701],{"class":1479},[1050,3310,1314],{"class":1073},[1050,3312,2804],{"class":1479},[1050,3314,1682],{"class":1670},[1050,3316,1661],{"class":1087},[1050,3318,1875],{"class":1073},[1050,3320,3321],{"class":1056},"  # Query per post\n",[1050,3323,3324],{"class":1052,"line":1237},[1050,3325,1433],{"class":1310},[1050,3327,3328],{"class":1052,"line":1258},[1050,3329,3330],{"class":1056},"        # Good: Single query with JOIN\n",[1050,3332,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3358,3360],{"class":1052,"line":1274},[1050,3334,3248],{"class":1310},[1050,3336,1504],{"class":1073},[1050,3338,2687],{"class":1310},[1050,3340,1314],{"class":1073},[1050,3342,2660],{"class":1479},[1050,3344,1314],{"class":1073},[1050,3346,2968],{"class":1485},[1050,3348,1409],{"class":1073},[1050,3350,1091],{"class":1083},[1050,3352,2701],{"class":1087},[1050,3354,1091],{"class":1083},[1050,3356,3357],{"class":1073},").",[1050,3359,3261],{"class":1485},[1050,3361,1489],{"class":1073},[1050,3363,3364,3366,3368,3370,3372],{"class":1052,"line":1279},[1050,3365,3268],{"class":1306},[1050,3367,2739],{"class":1310},[1050,3369,1633],{"class":1306},[1050,3371,2744],{"class":1310},[1050,3373,1366],{"class":1073},[1050,3375,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414],{"class":1052,"line":1284},[1050,3377,1653],{"class":1578},[1050,3379,1409],{"class":1073},[1050,3381,1658],{"class":1359},[1050,3383,1661],{"class":1087},[1050,3385,1671],{"class":1670},[1050,3387,3291],{"class":1485},[1050,3389,1314],{"class":1073},[1050,3391,2768],{"class":1479},[1050,3393,1682],{"class":1670},[1050,3395,3300],{"class":1087},[1050,3397,1671],{"class":1670},[1050,3399,3291],{"class":1485},[1050,3401,1314],{"class":1073},[1050,3403,2701],{"class":1479},[1050,3405,1314],{"class":1073},[1050,3407,2804],{"class":1479},[1050,3409,1682],{"class":1670},[1050,3411,1661],{"class":1087},[1050,3413,1875],{"class":1073},[1050,3415,3416],{"class":1056},"  # No additional queries\n",[1050,3418,3419],{"class":1052,"line":1290},[1050,3420,1386],{"class":1310},[1050,3422,3423,3425],{"class":1052,"line":1297},[1050,3424,1392],{"class":1073},[1050,3426,1396],{"class":1395},[1050,3428,3429,3431,3434],{"class":1052,"line":1303},[1050,3430,1402],{"class":1359},[1050,3432,3433],{"class":1405}," multi_level_select_related",[1050,3435,2262],{"class":1073},[1050,3437,3438,3440,3443],{"class":1052,"line":1326},[1050,3439,1422],{"class":1372},[1050,3441,3442],{"class":1376},"Multi-level select_related for nested relationships",[1050,3444,1380],{"class":1372},[1050,3446,3447],{"class":1052,"line":1343},[1050,3448,1433],{"class":1310},[1050,3450,3451],{"class":1052,"line":1351},[1050,3452,3453],{"class":1056},"        # Select related across multiple levels\n",[1050,3455,3456,3458,3460,3462,3464,3466,3468,3470],{"class":1052,"line":1356},[1050,3457,3248],{"class":1310},[1050,3459,1504],{"class":1073},[1050,3461,2687],{"class":1310},[1050,3463,1314],{"class":1073},[1050,3465,2660],{"class":1479},[1050,3467,1314],{"class":1073},[1050,3469,2968],{"class":1485},[1050,3471,3472],{"class":1073},"(\n",[1050,3474,3475,3477,3479,3481],{"class":1052,"line":1369},[1050,3476,1154],{"class":1083},[1050,3478,2701],{"class":1087},[1050,3480,1091],{"class":1083},[1050,3482,1101],{"class":1073},[1050,3484,3485,3487,3490,3492],{"class":1052,"line":1383},[1050,3486,1154],{"class":1083},[1050,3488,3489],{"class":1087},"author__profile",[1050,3491,1091],{"class":1083},[1050,3493,1101],{"class":1073},[1050,3495,3496,3498,3500,3502],{"class":1052,"line":1389},[1050,3497,1154],{"class":1083},[1050,3499,2817],{"class":1087},[1050,3501,1091],{"class":1083},[1050,3503,1101],{"class":1073},[1050,3505,3506,3508,3511],{"class":1052,"line":1399},[1050,3507,1154],{"class":1083},[1050,3509,3510],{"class":1087},"category__parent",[1050,3512,3513],{"class":1083},"'\n",[1050,3515,3516,3519,3521],{"class":1052,"line":1419},[1050,3517,3518],{"class":1073},"        ).",[1050,3520,3261],{"class":1485},[1050,3522,1489],{"class":1073},[1050,3524,3525],{"class":1052,"line":1430},[1050,3526,1433],{"class":1310},[1050,3528,3529,3531,3533,3535,3537],{"class":1052,"line":1436},[1050,3530,3268],{"class":1306},[1050,3532,2739],{"class":1310},[1050,3534,1633],{"class":1306},[1050,3536,2744],{"class":1310},[1050,3538,1366],{"class":1073},[1050,3540,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3574,3576,3579,3581,3583],{"class":1052,"line":1465},[1050,3542,1653],{"class":1578},[1050,3544,1409],{"class":1073},[1050,3546,1658],{"class":1359},[1050,3548,1661],{"class":1087},[1050,3550,1671],{"class":1670},[1050,3552,3291],{"class":1485},[1050,3554,1314],{"class":1073},[1050,3556,2768],{"class":1479},[1050,3558,1682],{"class":1670},[1050,3560,3300],{"class":1087},[1050,3562,1671],{"class":1670},[1050,3564,3291],{"class":1485},[1050,3566,1314],{"class":1073},[1050,3568,2701],{"class":1479},[1050,3570,1314],{"class":1073},[1050,3572,3573],{"class":1479},"profile",[1050,3575,1314],{"class":1073},[1050,3577,3578],{"class":1479},"full_name",[1050,3580,1682],{"class":1670},[1050,3582,1661],{"class":1087},[1050,3584,1540],{"class":1073},[1050,3586,3587,3589,3591,3593,3596,3598,3600,3602,3604,3606,3609,3611,3613,3615,3618,3620,3622,3624,3626,3628,3630,3632,3634],{"class":1052,"line":1471},[1050,3588,1653],{"class":1578},[1050,3590,1409],{"class":1073},[1050,3592,1658],{"class":1359},[1050,3594,3595],{"class":1087},"\"Category: ",[1050,3597,1671],{"class":1670},[1050,3599,3291],{"class":1485},[1050,3601,1314],{"class":1073},[1050,3603,2817],{"class":1479},[1050,3605,1314],{"class":1073},[1050,3607,3608],{"class":1479},"parent",[1050,3610,1314],{"class":1073},[1050,3612,2832],{"class":1479},[1050,3614,1682],{"class":1670},[1050,3616,3617],{"class":1087}," > ",[1050,3619,1671],{"class":1670},[1050,3621,3291],{"class":1485},[1050,3623,1314],{"class":1073},[1050,3625,2817],{"class":1479},[1050,3627,1314],{"class":1073},[1050,3629,2832],{"class":1479},[1050,3631,1682],{"class":1670},[1050,3633,1661],{"class":1087},[1050,3635,1540],{"class":1073},[1050,3637,3638],{"class":1052,"line":1492},[1050,3639,1386],{"class":1310},[1050,3641,3642,3644],{"class":1052,"line":1498},[1050,3643,1392],{"class":1073},[1050,3645,1396],{"class":1395},[1050,3647,3648,3650,3653],{"class":1052,"line":1517},[1050,3649,1402],{"class":1359},[1050,3651,3652],{"class":1405}," basic_prefetch_related",[1050,3654,2262],{"class":1073},[1050,3656,3657,3659,3662],{"class":1052,"line":1543},[1050,3658,1422],{"class":1372},[1050,3660,3661],{"class":1376},"Basic prefetch_related for many-to-many and reverse foreign keys",[1050,3663,1380],{"class":1372},[1050,3665,3666],{"class":1052,"line":1559},[1050,3667,1433],{"class":1310},[1050,3669,3670],{"class":1052,"line":1564},[1050,3671,3672],{"class":1056},"        # Bad: N+1 queries for tags\n",[1050,3674,3675,3677,3679,3681,3683,3685,3687,3689],{"class":1052,"line":1570},[1050,3676,3248],{"class":1310},[1050,3678,1504],{"class":1073},[1050,3680,2687],{"class":1310},[1050,3682,1314],{"class":1073},[1050,3684,2660],{"class":1479},[1050,3686,1314],{"class":1073},[1050,3688,3261],{"class":1485},[1050,3690,1489],{"class":1073},[1050,3692,3693,3695,3697,3699,3701],{"class":1052,"line":1594},[1050,3694,3268],{"class":1306},[1050,3696,2739],{"class":1310},[1050,3698,1633],{"class":1306},[1050,3700,2744],{"class":1310},[1050,3702,1366],{"class":1073},[1050,3704,3705,3708,3710,3713,3715,3717,3719,3722,3724,3726,3729],{"class":1052,"line":1645},[1050,3706,3707],{"class":1310},"            tags ",[1050,3709,1504],{"class":1073},[1050,3711,3712],{"class":1395}," list",[1050,3714,1409],{"class":1073},[1050,3716,3291],{"class":1485},[1050,3718,1314],{"class":1073},[1050,3720,3721],{"class":1479},"tags",[1050,3723,1314],{"class":1073},[1050,3725,3261],{"class":1485},[1050,3727,3728],{"class":1073},"())",[1050,3730,3321],{"class":1056},[1050,3732,3733],{"class":1052,"line":1650},[1050,3734,1433],{"class":1310},[1050,3736,3737],{"class":1052,"line":1690},[1050,3738,3739],{"class":1056},"        # Good: Prefetch tags in separate query\n",[1050,3741,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768],{"class":1052,"line":1713},[1050,3743,3248],{"class":1310},[1050,3745,1504],{"class":1073},[1050,3747,2687],{"class":1310},[1050,3749,1314],{"class":1073},[1050,3751,2660],{"class":1479},[1050,3753,1314],{"class":1073},[1050,3755,2996],{"class":1485},[1050,3757,1409],{"class":1073},[1050,3759,1091],{"class":1083},[1050,3761,3721],{"class":1087},[1050,3763,1091],{"class":1083},[1050,3765,3357],{"class":1073},[1050,3767,3261],{"class":1485},[1050,3769,1489],{"class":1073},[1050,3771,3772,3774,3776,3778,3780],{"class":1052,"line":1740},[1050,3773,3268],{"class":1306},[1050,3775,2739],{"class":1310},[1050,3777,1633],{"class":1306},[1050,3779,2744],{"class":1310},[1050,3781,1366],{"class":1073},[1050,3783,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804],{"class":1052,"line":1771},[1050,3785,3707],{"class":1310},[1050,3787,1504],{"class":1073},[1050,3789,3712],{"class":1395},[1050,3791,1409],{"class":1073},[1050,3793,3291],{"class":1485},[1050,3795,1314],{"class":1073},[1050,3797,3721],{"class":1479},[1050,3799,1314],{"class":1073},[1050,3801,3261],{"class":1485},[1050,3803,3728],{"class":1073},[1050,3805,3416],{"class":1056},[1050,3807,3808],{"class":1052,"line":1776},[1050,3809,1386],{"class":1310},[1050,3811,3812,3814],{"class":1052,"line":1782},[1050,3813,1392],{"class":1073},[1050,3815,1396],{"class":1395},[1050,3817,3818,3820,3823],{"class":1052,"line":1837},[1050,3819,1402],{"class":1359},[1050,3821,3822],{"class":1405}," custom_prefetch_related",[1050,3824,2262],{"class":1073},[1050,3826,3827,3829,3832],{"class":1052,"line":1848},[1050,3828,1422],{"class":1372},[1050,3830,3831],{"class":1376},"Custom prefetch with filtering and ordering",[1050,3833,1380],{"class":1372},[1050,3835,3836],{"class":1052,"line":1885},[1050,3837,1433],{"class":1310},[1050,3839,3840],{"class":1052,"line":1914},[1050,3841,3842],{"class":1056},"        # Prefetch only approved comments, ordered by date\n",[1050,3844,3845,3847,3849,3851,3853,3855,3857,3859],{"class":1052,"line":1958},[1050,3846,3248],{"class":1310},[1050,3848,1504],{"class":1073},[1050,3850,2687],{"class":1310},[1050,3852,1314],{"class":1073},[1050,3854,2660],{"class":1479},[1050,3856,1314],{"class":1073},[1050,3858,2996],{"class":1485},[1050,3860,3472],{"class":1073},[1050,3862,3863,3866],{"class":1052,"line":1998},[1050,3864,3865],{"class":1485},"            Prefetch",[1050,3867,3472],{"class":1073},[1050,3869,3870,3873,3875,3877],{"class":1052,"line":2003},[1050,3871,3872],{"class":1083},"                '",[1050,3874,2856],{"class":1087},[1050,3876,1091],{"class":1083},[1050,3878,1101],{"class":1073},[1050,3880,3881,3884,3886,3889,3891,3893,3895,3897,3899,3902,3904,3907],{"class":1052,"line":2009},[1050,3882,3883],{"class":2669},"                queryset",[1050,3885,1504],{"class":1073},[1050,3887,3888],{"class":1485},"Comment",[1050,3890,1314],{"class":1073},[1050,3892,2660],{"class":1479},[1050,3894,1314],{"class":1073},[1050,3896,2696],{"class":1485},[1050,3898,1409],{"class":1073},[1050,3900,3901],{"class":2669},"is_approved",[1050,3903,1504],{"class":1073},[1050,3905,3906],{"class":1116},"True",[1050,3908,1540],{"class":1073},[1050,3910,3911,3914,3916,3918,3920,3922,3924],{"class":1052,"line":2020},[1050,3912,3913],{"class":1073},"                                       .",[1050,3915,2968],{"class":1485},[1050,3917,1409],{"class":1073},[1050,3919,1091],{"class":1083},[1050,3921,2701],{"class":1087},[1050,3923,1091],{"class":1083},[1050,3925,1540],{"class":1073},[1050,3927,3928,3930,3933,3935,3937,3940,3942],{"class":1052,"line":2038},[1050,3929,3913],{"class":1073},[1050,3931,3932],{"class":1485},"order_by",[1050,3934,1409],{"class":1073},[1050,3936,1091],{"class":1083},[1050,3938,3939],{"class":1087},"-created_at",[1050,3941,1091],{"class":1083},[1050,3943,1540],{"class":1073},[1050,3945,3946],{"class":1052,"line":2118},[1050,3947,3948],{"class":1073},"            )\n",[1050,3950,3951,3953,3955],{"class":1052,"line":2158},[1050,3952,3518],{"class":1073},[1050,3954,3261],{"class":1485},[1050,3956,1489],{"class":1073},[1050,3958,3959],{"class":1052,"line":2163},[1050,3960,1433],{"class":1310},[1050,3962,3963,3965,3967,3969,3971],{"class":1052,"line":2215},[1050,3964,3268],{"class":1306},[1050,3966,2739],{"class":1310},[1050,3968,1633],{"class":1306},[1050,3970,2744],{"class":1310},[1050,3972,1366],{"class":1073},[1050,3974,3975,3978,3980,3982,3984,3986,3988,3990,3992],{"class":1052,"line":2225},[1050,3976,3977],{"class":1310},"            approved_comments ",[1050,3979,1504],{"class":1073},[1050,3981,2775],{"class":1310},[1050,3983,1314],{"class":1073},[1050,3985,2856],{"class":1479},[1050,3987,1314],{"class":1073},[1050,3989,3261],{"class":1485},[1050,3991,2200],{"class":1073},[1050,3993,3994],{"class":1056},"  # Already filtered and ordered\n",[1050,3996,3997],{"class":1052,"line":2243},[1050,3998,1386],{"class":1310},[1050,4000,4001,4003],{"class":1052,"line":2265},[1050,4002,1392],{"class":1073},[1050,4004,1396],{"class":1395},[1050,4006,4007,4009,4012],{"class":1052,"line":2305},[1050,4008,1402],{"class":1359},[1050,4010,4011],{"class":1405}," complex_prefetch_patterns",[1050,4013,2262],{"class":1073},[1050,4015,4016,4018,4021],{"class":1052,"line":2310},[1050,4017,1422],{"class":1372},[1050,4019,4020],{"class":1376},"Complex prefetch patterns for nested relationships",[1050,4022,1380],{"class":1372},[1050,4024,4025],{"class":1052,"line":2319},[1050,4026,1433],{"class":1310},[1050,4028,4029],{"class":1052,"line":2324},[1050,4030,4031],{"class":1056},"        # Prefetch posts with their comments and comment authors\n",[1050,4033,4034,4037,4039,4042,4044,4046,4048,4050],{"class":1052,"line":2333},[1050,4035,4036],{"class":1310},"        authors ",[1050,4038,1504],{"class":1073},[1050,4040,4041],{"class":1310}," Author",[1050,4043,1314],{"class":1073},[1050,4045,2660],{"class":1479},[1050,4047,1314],{"class":1073},[1050,4049,2996],{"class":1485},[1050,4051,3472],{"class":1073},[1050,4053,4054,4056],{"class":1052,"line":2338},[1050,4055,3865],{"class":1485},[1050,4057,3472],{"class":1073},[1050,4059,4060,4062,4065,4067],{"class":1052,"line":2345},[1050,4061,3872],{"class":1083},[1050,4063,4064],{"class":1087},"posts",[1050,4066,1091],{"class":1083},[1050,4068,1101],{"class":1073},[1050,4070,4071,4073,4075,4078,4080,4082,4084,4086,4088,4090,4092,4094],{"class":1052,"line":2360},[1050,4072,3883],{"class":2669},[1050,4074,1504],{"class":1073},[1050,4076,4077],{"class":1485},"Post",[1050,4079,1314],{"class":1073},[1050,4081,2660],{"class":1479},[1050,4083,1314],{"class":1073},[1050,4085,2968],{"class":1485},[1050,4087,1409],{"class":1073},[1050,4089,1091],{"class":1083},[1050,4091,2817],{"class":1087},[1050,4093,1091],{"class":1083},[1050,4095,1540],{"class":1073},[1050,4097,4098,4101,4103],{"class":1052,"line":2370},[1050,4099,4100],{"class":1073},"                                   .",[1050,4102,2996],{"class":1485},[1050,4104,3472],{"class":1073},[1050,4106,4107,4110],{"class":1052,"line":2375},[1050,4108,4109],{"class":1485},"                                       Prefetch",[1050,4111,3472],{"class":1073},[1050,4113,4114,4117,4119,4121],{"class":1052,"line":2400},[1050,4115,4116],{"class":1083},"                                           '",[1050,4118,2856],{"class":1087},[1050,4120,1091],{"class":1083},[1050,4122,1101],{"class":1073},[1050,4124,4125,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148],{"class":1052,"line":2423},[1050,4126,4127],{"class":2669},"                                           queryset",[1050,4129,1504],{"class":1073},[1050,4131,3888],{"class":1485},[1050,4133,1314],{"class":1073},[1050,4135,2660],{"class":1479},[1050,4137,1314],{"class":1073},[1050,4139,2968],{"class":1485},[1050,4141,1409],{"class":1073},[1050,4143,1091],{"class":1083},[1050,4145,2701],{"class":1087},[1050,4147,1091],{"class":1083},[1050,4149,1540],{"class":1073},[1050,4151,4152,4155,4157,4159,4161,4163,4165],{"class":1052,"line":2455},[1050,4153,4154],{"class":1073},"                                                                  .",[1050,4156,2696],{"class":1485},[1050,4158,1409],{"class":1073},[1050,4160,3901],{"class":2669},[1050,4162,1504],{"class":1073},[1050,4164,3906],{"class":1116},[1050,4166,1540],{"class":1073},[1050,4168,4169],{"class":1052,"line":2470},[1050,4170,4171],{"class":1073},"                                       )\n",[1050,4173,4174],{"class":1052,"line":2475},[1050,4175,4176],{"class":1073},"                                   )\n",[1050,4178,4179],{"class":1052,"line":2498},[1050,4180,3948],{"class":1073},[1050,4182,4183,4185,4187],{"class":1052,"line":2517},[1050,4184,3518],{"class":1073},[1050,4186,3261],{"class":1485},[1050,4188,1489],{"class":1073},[1050,4190,4191],{"class":1052,"line":2547},[1050,4192,1433],{"class":1310},[1050,4194,4195,4197,4200,4202,4205],{"class":1052,"line":2560},[1050,4196,3268],{"class":1306},[1050,4198,4199],{"class":1310}," author ",[1050,4201,1633],{"class":1306},[1050,4203,4204],{"class":1310}," authors",[1050,4206,1366],{"class":1073},[1050,4208,4209,4211,4213,4215,4218,4220,4222,4224,4226],{"class":1052,"line":2565},[1050,4210,2023],{"class":1306},[1050,4212,2739],{"class":1310},[1050,4214,1633],{"class":1306},[1050,4216,4217],{"class":1310}," author",[1050,4219,1314],{"class":1073},[1050,4221,4064],{"class":1479},[1050,4223,1314],{"class":1073},[1050,4225,3261],{"class":1485},[1050,4227,2262],{"class":1073},[1050,4229,4230,4232,4234,4236,4239,4241,4243,4245,4247,4249,4252,4254,4256,4258,4260,4262,4264,4266,4268],{"class":1052,"line":2573},[1050,4231,1851],{"class":1578},[1050,4233,1409],{"class":1073},[1050,4235,1658],{"class":1359},[1050,4237,4238],{"class":1087},"\"Post: ",[1050,4240,1671],{"class":1670},[1050,4242,3291],{"class":1485},[1050,4244,1314],{"class":1073},[1050,4246,2768],{"class":1479},[1050,4248,1682],{"class":1670},[1050,4250,4251],{"class":1087}," in ",[1050,4253,1671],{"class":1670},[1050,4255,3291],{"class":1485},[1050,4257,1314],{"class":1073},[1050,4259,2817],{"class":1479},[1050,4261,1314],{"class":1073},[1050,4263,2832],{"class":1479},[1050,4265,1682],{"class":1670},[1050,4267,1661],{"class":1087},[1050,4269,1540],{"class":1073},[1050,4271,4272,4274,4277,4279,4281,4283,4285,4287,4289],{"class":1052,"line":2591},[1050,4273,1888],{"class":1306},[1050,4275,4276],{"class":1310}," comment ",[1050,4278,1633],{"class":1306},[1050,4280,2775],{"class":1310},[1050,4282,1314],{"class":1073},[1050,4284,2856],{"class":1479},[1050,4286,1314],{"class":1073},[1050,4288,3261],{"class":1485},[1050,4290,2262],{"class":1073},[1050,4292,4293,4295,4297,4299,4302,4304,4307,4309,4311,4313,4315,4317,4319],{"class":1052,"line":2596},[1050,4294,1917],{"class":1578},[1050,4296,1409],{"class":1073},[1050,4298,1658],{"class":1359},[1050,4300,4301],{"class":1087},"\"  Comment by ",[1050,4303,1671],{"class":1670},[1050,4305,4306],{"class":1485},"comment",[1050,4308,1314],{"class":1073},[1050,4310,2701],{"class":1479},[1050,4312,1314],{"class":1073},[1050,4314,2804],{"class":1479},[1050,4316,1682],{"class":1670},[1050,4318,1661],{"class":1087},[1050,4320,1540],{"class":1073},[1050,4322,4323],{"class":1052,"line":2602},[1050,4324,1386],{"class":1310},[1050,4326,4327,4329],{"class":1052,"line":2616},[1050,4328,1392],{"class":1073},[1050,4330,1396],{"class":1395},[1050,4332,4333,4335,4338],{"class":1052,"line":2632},[1050,4334,1402],{"class":1359},[1050,4336,4337],{"class":1405}," conditional_prefetch",[1050,4339,2262],{"class":1073},[1050,4341,4342,4344,4347],{"class":1052,"line":2642},[1050,4343,1422],{"class":1372},[1050,4345,4346],{"class":1376},"Conditional prefetching based on user permissions",[1050,4348,1380],{"class":1372},[1050,4350,4351],{"class":1052,"line":2647},[1050,4352,1433],{"class":1310},[1050,4354,4355,4357,4360,4362,4364],{"class":1052,"line":2679},[1050,4356,1439],{"class":1359},[1050,4358,4359],{"class":1405}," get_posts_for_user",[1050,4361,1409],{"class":1073},[1050,4363,2706],{"class":1412},[1050,4365,1416],{"class":1073},[1050,4367,4368,4371,4374],{"class":1052,"line":2711},[1050,4369,4370],{"class":1372},"            \"\"\"",[1050,4372,4373],{"class":1376},"Get posts with appropriate prefetching based on user role",[1050,4375,1380],{"class":1372},[1050,4377,4378],{"class":1052,"line":2716},[1050,4379,1495],{"class":1310},[1050,4381,4382,4385,4387,4389,4391,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413],{"class":1052,"line":2722},[1050,4383,4384],{"class":1310},"            base_queryset ",[1050,4386,1504],{"class":1073},[1050,4388,2687],{"class":1310},[1050,4390,1314],{"class":1073},[1050,4392,2660],{"class":1479},[1050,4394,1314],{"class":1073},[1050,4396,2968],{"class":1485},[1050,4398,1409],{"class":1073},[1050,4400,1091],{"class":1083},[1050,4402,2701],{"class":1087},[1050,4404,1091],{"class":1083},[1050,4406,1454],{"class":1073},[1050,4408,1164],{"class":1083},[1050,4410,2817],{"class":1087},[1050,4412,1091],{"class":1083},[1050,4414,1540],{"class":1073},[1050,4416,4417],{"class":1052,"line":2733},[1050,4418,1495],{"class":1310},[1050,4420,4421,4423,4426,4428,4431],{"class":1052,"line":2749},[1050,4422,1840],{"class":1306},[1050,4424,4425],{"class":1310}," user",[1050,4427,1314],{"class":1073},[1050,4429,4430],{"class":1479},"is_staff",[1050,4432,1366],{"class":1073},[1050,4434,4435],{"class":1052,"line":2763},[1050,4436,4437],{"class":1056},"                # Staff can see all comments\n",[1050,4439,4440,4442,4445,4447,4449,4451,4453,4456,4458],{"class":1052,"line":2784},[1050,4441,2458],{"class":1306},[1050,4443,4444],{"class":1310}," base_queryset",[1050,4446,1314],{"class":1073},[1050,4448,2996],{"class":1485},[1050,4450,1409],{"class":1073},[1050,4452,1091],{"class":1083},[1050,4454,4455],{"class":1087},"comments__author",[1050,4457,1091],{"class":1083},[1050,4459,1540],{"class":1073},[1050,4461,4462,4465],{"class":1052,"line":2812},[1050,4463,4464],{"class":1306},"            else",[1050,4466,1366],{"class":1073},[1050,4468,4469],{"class":1052,"line":2840},[1050,4470,4471],{"class":1056},"                # Regular users only see approved comments\n",[1050,4473,4474,4476,4478,4480,4482],{"class":1052,"line":2867},[1050,4475,2458],{"class":1306},[1050,4477,4444],{"class":1310},[1050,4479,1314],{"class":1073},[1050,4481,2996],{"class":1485},[1050,4483,3472],{"class":1073},[1050,4485,4486,4489],{"class":1052,"line":2873},[1050,4487,4488],{"class":1485},"                    Prefetch",[1050,4490,3472],{"class":1073},[1050,4492,4493,4496,4498,4500],{"class":1052,"line":2878},[1050,4494,4495],{"class":1083},"                        '",[1050,4497,2856],{"class":1087},[1050,4499,1091],{"class":1083},[1050,4501,1101],{"class":1073},[1050,4503,4504,4507,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527],{"class":1052,"line":2886},[1050,4505,4506],{"class":2669},"                        queryset",[1050,4508,1504],{"class":1073},[1050,4510,3888],{"class":1485},[1050,4512,1314],{"class":1073},[1050,4514,2660],{"class":1479},[1050,4516,1314],{"class":1073},[1050,4518,2696],{"class":1485},[1050,4520,1409],{"class":1073},[1050,4522,3901],{"class":2669},[1050,4524,1504],{"class":1073},[1050,4526,3906],{"class":1116},[1050,4528,1540],{"class":1073},[1050,4530,4531,4534,4536,4538,4540,4542,4544],{"class":1052,"line":2891},[1050,4532,4533],{"class":1073},"                                               .",[1050,4535,2968],{"class":1485},[1050,4537,1409],{"class":1073},[1050,4539,1091],{"class":1083},[1050,4541,2701],{"class":1087},[1050,4543,1091],{"class":1083},[1050,4545,1540],{"class":1073},[1050,4547,4548],{"class":1052,"line":2902},[1050,4549,4550],{"class":1073},"                    )\n",[1050,4552,4553],{"class":1052,"line":2916},[1050,4554,4555],{"class":1073},"                )\n",[1050,4557,4558],{"class":1052,"line":2926},[1050,4559,1386],{"class":1310},[1050,4561,4562,4564],{"class":1052,"line":2931},[1050,4563,1392],{"class":1073},[1050,4565,1396],{"class":1395},[1050,4567,4568,4570,4573],{"class":1052,"line":2962},[1050,4569,1402],{"class":1359},[1050,4571,4572],{"class":1405}," optimized_aggregation_queries",[1050,4574,2262],{"class":1073},[1050,4576,4577,4579,4582],{"class":1052,"line":2991},[1050,4578,1422],{"class":1372},[1050,4580,4581],{"class":1376},"Optimize queries with aggregations",[1050,4583,1380],{"class":1372},[1050,4585,4586],{"class":1052,"line":3009},[1050,4587,1433],{"class":1310},[1050,4589,4590],{"class":1052,"line":3014},[1050,4591,4592],{"class":1056},"        # Bad: Multiple queries for counts\n",[1050,4594,4595,4597,4599,4601,4603,4605,4607,4609],{"class":1052,"line":3023},[1050,4596,3248],{"class":1310},[1050,4598,1504],{"class":1073},[1050,4600,2687],{"class":1310},[1050,4602,1314],{"class":1073},[1050,4604,2660],{"class":1479},[1050,4606,1314],{"class":1073},[1050,4608,3261],{"class":1485},[1050,4610,1489],{"class":1073},[1050,4612,4613,4615,4617,4619,4621],{"class":1052,"line":3036},[1050,4614,3268],{"class":1306},[1050,4616,2739],{"class":1310},[1050,4618,1633],{"class":1306},[1050,4620,2744],{"class":1310},[1050,4622,1366],{"class":1073},[1050,4624,4625,4628,4630,4632,4634,4636,4638,4640,4642],{"class":1052,"line":3047},[1050,4626,4627],{"class":1310},"            comment_count ",[1050,4629,1504],{"class":1073},[1050,4631,2775],{"class":1310},[1050,4633,1314],{"class":1073},[1050,4635,2856],{"class":1479},[1050,4637,1314],{"class":1073},[1050,4639,2279],{"class":1485},[1050,4641,2200],{"class":1073},[1050,4643,3321],{"class":1056},[1050,4645,4646,4649,4651,4653,4655,4658,4660,4662,4664],{"class":1052,"line":3066},[1050,4647,4648],{"class":1310},"            like_count ",[1050,4650,1504],{"class":1073},[1050,4652,2775],{"class":1310},[1050,4654,1314],{"class":1073},[1050,4656,4657],{"class":1479},"likes",[1050,4659,1314],{"class":1073},[1050,4661,2279],{"class":1485},[1050,4663,2200],{"class":1073},[1050,4665,4666],{"class":1056},"        # Query per post\n",[1050,4668,4669],{"class":1052,"line":3089},[1050,4670,1433],{"class":1310},[1050,4672,4673],{"class":1052,"line":3112},[1050,4674,4675],{"class":1056},"        # Good: Annotate with counts\n",[1050,4677,4678,4680,4682,4684,4686,4688,4690,4693],{"class":1052,"line":3135},[1050,4679,3248],{"class":1310},[1050,4681,1504],{"class":1073},[1050,4683,2687],{"class":1310},[1050,4685,1314],{"class":1073},[1050,4687,2660],{"class":1479},[1050,4689,1314],{"class":1073},[1050,4691,4692],{"class":1485},"annotate",[1050,4694,3472],{"class":1073},[1050,4696,4697,4700,4702,4705,4707,4709,4711,4713],{"class":1052,"line":3140},[1050,4698,4699],{"class":2669},"            comment_count",[1050,4701,1504],{"class":1073},[1050,4703,4704],{"class":1485},"Count",[1050,4706,1409],{"class":1073},[1050,4708,1091],{"class":1083},[1050,4710,2856],{"class":1087},[1050,4712,1091],{"class":1083},[1050,4714,4715],{"class":1073},"),\n",[1050,4717,4718,4721,4723,4725,4727,4729,4731,4733],{"class":1052,"line":3145},[1050,4719,4720],{"class":2669},"            like_count",[1050,4722,1504],{"class":1073},[1050,4724,4704],{"class":1485},[1050,4726,1409],{"class":1073},[1050,4728,1091],{"class":1083},[1050,4730,4657],{"class":1087},[1050,4732,1091],{"class":1083},[1050,4734,1540],{"class":1073},[1050,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758],{"class":1052,"line":4737},128,[1050,4739,3518],{"class":1073},[1050,4741,2968],{"class":1485},[1050,4743,1409],{"class":1073},[1050,4745,1091],{"class":1083},[1050,4747,2701],{"class":1087},[1050,4749,1091],{"class":1083},[1050,4751,1454],{"class":1073},[1050,4753,1164],{"class":1083},[1050,4755,2817],{"class":1087},[1050,4757,1091],{"class":1083},[1050,4759,1540],{"class":1073},[1050,4761,4763],{"class":1052,"line":4762},129,[1050,4764,1433],{"class":1310},[1050,4766,4768,4770,4772,4774,4776],{"class":1052,"line":4767},130,[1050,4769,3268],{"class":1306},[1050,4771,2739],{"class":1310},[1050,4773,1633],{"class":1306},[1050,4775,2744],{"class":1310},[1050,4777,1366],{"class":1073},[1050,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799,4802,4804,4806,4808,4810,4812,4815,4817,4819,4821,4824,4826,4829],{"class":1052,"line":4780},131,[1050,4782,1653],{"class":1578},[1050,4784,1409],{"class":1073},[1050,4786,1658],{"class":1359},[1050,4788,1661],{"class":1087},[1050,4790,1671],{"class":1670},[1050,4792,3291],{"class":1485},[1050,4794,1314],{"class":1073},[1050,4796,2768],{"class":1479},[1050,4798,1682],{"class":1670},[1050,4800,4801],{"class":1087},": ",[1050,4803,1671],{"class":1670},[1050,4805,3291],{"class":1485},[1050,4807,1314],{"class":1073},[1050,4809,2845],{"class":1479},[1050,4811,1682],{"class":1670},[1050,4813,4814],{"class":1087}," comments, ",[1050,4816,1671],{"class":1670},[1050,4818,3291],{"class":1485},[1050,4820,1314],{"class":1073},[1050,4822,4823],{"class":1479},"like_count",[1050,4825,1682],{"class":1670},[1050,4827,4828],{"class":1087}," likes\"",[1050,4830,1540],{"class":1073},[1030,4832,4834],{"id":4833},"database-indexing-strategies","Database Indexing Strategies",[1035,4836,4838],{"id":4837},"index-creation-and-management","Index Creation and Management",[1040,4840,4842],{"className":1042,"code":4841,"language":1044,"meta":1045,"style":1045},"# models.py with strategic indexing\nfrom django.db import models\n\nclass OptimizedPost(models.Model):\n    \"\"\"Post model with optimized indexing\"\"\"\n    \n    title = models.CharField(max_length=200)\n    slug = models.SlugField(max_length=200, unique=True)  # Automatic index\n    content = models.TextField()\n    author = models.ForeignKey(User, on_delete=models.CASCADE)  # Automatic index\n    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)\n    status = models.CharField(max_length=20, default='draft')\n    is_featured = models.BooleanField(default=False)\n    view_count = models.PositiveIntegerField(default=0)\n    created_at = models.DateTimeField(auto_now_add=True)\n    updated_at = models.DateTimeField(auto_now=True)\n    published_at = models.DateTimeField(null=True, blank=True)\n    \n    class Meta:\n        # Composite indexes for common query patterns\n        indexes = [\n            # For filtering published posts by date\n            models.Index(fields=['status', 'published_at']),\n            \n            # For author's posts ordered by date\n            models.Index(fields=['author', 'created_at']),\n            \n            # For category posts with status\n            models.Index(fields=['category', 'status', 'created_at']),\n            \n            # For featured posts\n            models.Index(fields=['is_featured', 'published_at']),\n            \n            # For popular posts\n            models.Index(fields=['view_count']),\n            \n            # Partial index for published posts only (PostgreSQL)\n            models.Index(\n                fields=['created_at'],\n                name='idx_published_posts_date',\n                condition=models.Q(status='published')\n            ),\n        ]\n        \n        # Default ordering uses indexed fields\n        ordering = ['-created_at']\n\nclass IndexOptimizationManager:\n    \"\"\"Manage database indexes for optimal performance\"\"\"\n    \n    @staticmethod\n    def analyze_missing_indexes():\n        \"\"\"Analyze queries to identify missing indexes\"\"\"\n        \n        # PostgreSQL: Check for sequential scans on large tables\n        missing_indexes_query = \"\"\"\n        SELECT \n            schemaname,\n            tablename,\n            seq_scan,\n            seq_tup_read,\n            idx_scan,\n            idx_tup_fetch,\n            seq_tup_read / seq_scan as avg_seq_read\n        FROM pg_stat_user_tables\n        WHERE seq_scan > 0\n            AND seq_tup_read / seq_scan > 1000\n        ORDER BY seq_tup_read DESC\n        \"\"\"\n        \n        with connection.cursor() as cursor:\n            cursor.execute(missing_indexes_query)\n            return cursor.fetchall()\n    \n    @staticmethod\n    def analyze_unused_indexes():\n        \"\"\"Find unused indexes that can be dropped\"\"\"\n        \n        unused_indexes_query = \"\"\"\n        SELECT \n            schemaname,\n            tablename,\n            indexname,\n            idx_scan,\n            pg_size_pretty(pg_relation_size(indexrelid)) as size\n        FROM pg_stat_user_indexes\n        WHERE idx_scan = 0\n            AND indexrelname NOT LIKE '%_pkey'\n        ORDER BY pg_relation_size(indexrelid) DESC\n        \"\"\"\n        \n        with connection.cursor() as cursor:\n            cursor.execute(unused_indexes_query)\n            return cursor.fetchall()\n    \n    @staticmethod\n    def create_conditional_indexes():\n        \"\"\"Create conditional indexes for specific use cases\"\"\"\n        \n        conditional_indexes = [\n            # Index only for published posts\n            \"\"\"\n            CREATE INDEX CONCURRENTLY idx_published_posts_category\n            ON blog_post (category_id, created_at)\n            WHERE status = 'published'\n            \"\"\",\n            \n            # Index for active users only\n            \"\"\"\n            CREATE INDEX CONCURRENTLY idx_active_users_login\n            ON auth_user (last_login)\n            WHERE is_active = true\n            \"\"\",\n            \n            # Index for recent data only\n            \"\"\"\n            CREATE INDEX CONCURRENTLY idx_recent_analytics\n            ON analytics_event (event_type, timestamp)\n            WHERE timestamp > NOW() - INTERVAL '30 days'\n            \"\"\",\n        ]\n        \n        with connection.cursor() as cursor:\n            for index_sql in conditional_indexes:\n                try:\n                    cursor.execute(index_sql)\n                    print(f\"Created index: {index_sql.split()[4]}\")\n                except Exception as e:\n                    print(f\"Error creating index: {e}\")\n    \n    @staticmethod\n    def optimize_text_search_indexes():\n        \"\"\"Create indexes for text search optimization\"\"\"\n        \n        # PostgreSQL GIN indexes for full-text search\n        text_search_indexes = [\n            # Full-text search on title and content\n            \"\"\"\n            CREATE INDEX CONCURRENTLY idx_post_fulltext\n            ON blog_post USING GIN (to_tsvector('english', title || ' ' || content))\n            \"\"\",\n            \n            # Trigram index for fuzzy matching\n            \"\"\"\n            CREATE EXTENSION IF NOT EXISTS pg_trgm;\n            CREATE INDEX CONCURRENTLY idx_post_title_trgm\n            ON blog_post USING GIN (title gin_trgm_ops)\n            \"\"\",\n            \n            # JSON field indexing\n            \"\"\"\n            CREATE INDEX CONCURRENTLY idx_post_metadata_gin\n            ON blog_post USING GIN (metadata)\n            \"\"\",\n        ]\n        \n        with connection.cursor() as cursor:\n            for index_sql in text_search_indexes:\n                try:\n                    cursor.execute(index_sql)\n                    print(f\"Created text search index\")\n                except Exception as e:\n                    print(f\"Error creating text search index: {e}\")\n\n# Index monitoring and maintenance\nclass IndexMaintenanceManager:\n    \"\"\"Monitor and maintain database indexes\"\"\"\n    \n    @staticmethod\n    def get_index_usage_stats():\n        \"\"\"Get comprehensive index usage statistics\"\"\"\n        \n        index_stats_query = \"\"\"\n        SELECT \n            t.schemaname,\n            t.tablename,\n            i.indexname,\n            i.idx_scan,\n            i.idx_tup_read,\n            i.idx_tup_fetch,\n            pg_size_pretty(pg_relation_size(i.indexrelid)) as size,\n            pg_relation_size(i.indexrelid) as size_bytes,\n            CASE \n                WHEN i.idx_scan = 0 THEN 'Unused'\n                WHEN i.idx_scan \u003C 100 THEN 'Low Usage'\n                WHEN i.idx_scan \u003C 1000 THEN 'Medium Usage'\n                ELSE 'High Usage'\n            END as usage_category\n        FROM pg_stat_user_indexes i\n        JOIN pg_stat_user_tables t ON i.relid = t.relid\n        ORDER BY i.idx_scan DESC, pg_relation_size(i.indexrelid) DESC\n        \"\"\"\n        \n        with connection.cursor() as cursor:\n            cursor.execute(index_stats_query)\n            columns = [desc[0] for desc in cursor.description]\n            return [dict(zip(columns, row)) for row in cursor.fetchall()]\n    \n    @staticmethod\n    def reindex_fragmented_indexes():\n        \"\"\"Reindex fragmented indexes\"\"\"\n        \n        # Find fragmented indexes (PostgreSQL)\n        fragmentation_query = \"\"\"\n        SELECT \n            schemaname,\n            tablename,\n            indexname,\n            pg_size_pretty(pg_relation_size(indexrelid)) as size\n        FROM pg_stat_user_indexes\n        WHERE idx_scan > 1000  -- Only reindex used indexes\n        ORDER BY pg_relation_size(indexrelid) DESC\n        \"\"\"\n        \n        with connection.cursor() as cursor:\n            cursor.execute(fragmentation_query)\n            indexes_to_reindex = cursor.fetchall()\n            \n            for schema, table, index, size in indexes_to_reindex:\n                try:\n                    cursor.execute(f\"REINDEX INDEX CONCURRENTLY {index}\")\n                    print(f\"Reindexed {index} ({size})\")\n                except Exception as e:\n                    print(f\"Error reindexing {index}: {e}\")\n    \n    @staticmethod\n    def analyze_table_statistics():\n        \"\"\"Update table statistics for query planner\"\"\"\n        \n        with connection.cursor() as cursor:\n            # PostgreSQL: Update statistics\n            cursor.execute(\"ANALYZE\")\n            \n            # Get table statistics\n            stats_query = \"\"\"\n            SELECT \n                schemaname,\n                tablename,\n                n_live_tup,\n                n_dead_tup,\n                last_vacuum,\n                last_autovacuum,\n                last_analyze,\n                last_autoanalyze\n            FROM pg_stat_user_tables\n            ORDER BY n_live_tup DESC\n            \"\"\"\n            \n            cursor.execute(stats_query)\n            return cursor.fetchall()\n",[1047,4843,4844,4849,4864,4868,4888,4897,4901,4928,4964,4980,5018,5060,5098,5124,5148,5173,5197,5230,5234,5244,5249,5259,5264,5301,5305,5310,5341,5345,5350,5388,5392,5397,5428,5432,5437,5460,5464,5469,5479,5494,5510,5539,5544,5549,5553,5558,5575,5579,5588,5597,5601,5607,5616,5625,5629,5634,5644,5649,5654,5659,5664,5669,5674,5679,5684,5689,5694,5699,5704,5709,5713,5732,5748,5760,5764,5770,5779,5788,5792,5801,5805,5809,5813,5818,5822,5827,5832,5837,5842,5847,5851,5855,5873,5888,5900,5904,5910,5919,5928,5932,5941,5946,5951,5956,5961,5966,5972,5976,5981,5985,5990,5995,6000,6006,6010,6015,6019,6024,6029,6034,6040,6044,6048,6066,6080,6087,6103,6136,6151,6173,6177,6183,6193,6203,6208,6214,6224,6230,6235,6241,6247,6254,6259,6265,6270,6276,6282,6288,6295,6300,6306,6311,6317,6323,6330,6335,6340,6359,6373,6380,6395,6409,6422,6444,6449,6455,6465,6475,6480,6487,6497,6507,6512,6522,6527,6533,6539,6545,6551,6557,6563,6569,6575,6581,6587,6593,6599,6605,6611,6617,6623,6629,6634,6639,6658,6674,6709,6753,6758,6765,6775,6785,6790,6796,6806,6811,6816,6821,6826,6831,6836,6842,6847,6852,6857,6876,6892,6908,6913,6943,6950,6977,7010,7023,7053,7058,7065,7075,7085,7090,7109,7115,7135,7140,7146,7156,7162,7168,7174,7180,7186,7192,7198,7204,7210,7216,7222,7227,7232,7248],{"__ignoreMap":1045},[1050,4845,4846],{"class":1052,"line":1053},[1050,4847,4848],{"class":1056},"# models.py with strategic indexing\n",[1050,4850,4851,4853,4855,4857,4859,4861],{"class":1052,"line":1060},[1050,4852,1307],{"class":1306},[1050,4854,1311],{"class":1310},[1050,4856,1314],{"class":1073},[1050,4858,1317],{"class":1310},[1050,4860,1320],{"class":1306},[1050,4862,4863],{"class":1310}," models\n",[1050,4865,4866],{"class":1052,"line":1066},[1050,4867,1294],{"emptyLinePlaceholder":1293},[1050,4869,4870,4872,4875,4877,4881,4883,4886],{"class":1052,"line":1080},[1050,4871,1157],{"class":1359},[1050,4873,4874],{"class":1362}," OptimizedPost",[1050,4876,1409],{"class":1073},[1050,4878,4880],{"class":4879},"sYn-s","models",[1050,4882,1314],{"class":1073},[1050,4884,4885],{"class":4879},"Model",[1050,4887,1416],{"class":1073},[1050,4889,4890,4892,4895],{"class":1052,"line":1104},[1050,4891,1373],{"class":1372},[1050,4893,4894],{"class":1376},"Post model with optimized indexing",[1050,4896,1380],{"class":1372},[1050,4898,4899],{"class":1052,"line":1122},[1050,4900,1386],{"class":1310},[1050,4902,4903,4906,4908,4911,4913,4916,4918,4921,4923,4926],{"class":1052,"line":1136},[1050,4904,4905],{"class":1310},"    title ",[1050,4907,1504],{"class":1073},[1050,4909,4910],{"class":1310}," models",[1050,4912,1314],{"class":1073},[1050,4914,4915],{"class":1485},"CharField",[1050,4917,1409],{"class":1073},[1050,4919,4920],{"class":2669},"max_length",[1050,4922,1504],{"class":1073},[1050,4924,4925],{"class":1097},"200",[1050,4927,1540],{"class":1073},[1050,4929,4930,4933,4935,4937,4939,4942,4944,4946,4948,4950,4952,4955,4957,4959,4961],{"class":1052,"line":1151},[1050,4931,4932],{"class":1310},"    slug ",[1050,4934,1504],{"class":1073},[1050,4936,4910],{"class":1310},[1050,4938,1314],{"class":1073},[1050,4940,4941],{"class":1485},"SlugField",[1050,4943,1409],{"class":1073},[1050,4945,4920],{"class":2669},[1050,4947,1504],{"class":1073},[1050,4949,4925],{"class":1097},[1050,4951,1454],{"class":1073},[1050,4953,4954],{"class":2669}," unique",[1050,4956,1504],{"class":1073},[1050,4958,3906],{"class":1116},[1050,4960,1875],{"class":1073},[1050,4962,4963],{"class":1056},"  # Automatic index\n",[1050,4965,4966,4969,4971,4973,4975,4978],{"class":1052,"line":1174},[1050,4967,4968],{"class":1310},"    content ",[1050,4970,1504],{"class":1073},[1050,4972,4910],{"class":1310},[1050,4974,1314],{"class":1073},[1050,4976,4977],{"class":1485},"TextField",[1050,4979,1489],{"class":1073},[1050,4981,4982,4985,4987,4989,4991,4994,4996,4999,5001,5004,5006,5008,5010,5014,5016],{"class":1052,"line":1180},[1050,4983,4984],{"class":1310},"    author ",[1050,4986,1504],{"class":1073},[1050,4988,4910],{"class":1310},[1050,4990,1314],{"class":1073},[1050,4992,4993],{"class":1485},"ForeignKey",[1050,4995,1409],{"class":1073},[1050,4997,4998],{"class":1485},"User",[1050,5000,1454],{"class":1073},[1050,5002,5003],{"class":2669}," on_delete",[1050,5005,1504],{"class":1073},[1050,5007,4880],{"class":1485},[1050,5009,1314],{"class":1073},[1050,5011,5013],{"class":5012},"sFGJz","CASCADE",[1050,5015,1875],{"class":1073},[1050,5017,4963],{"class":1056},[1050,5019,5020,5023,5025,5027,5029,5031,5033,5036,5038,5040,5042,5044,5046,5049,5051,5054,5056,5058],{"class":1052,"line":1186},[1050,5021,5022],{"class":1310},"    category ",[1050,5024,1504],{"class":1073},[1050,5026,4910],{"class":1310},[1050,5028,1314],{"class":1073},[1050,5030,4993],{"class":1485},[1050,5032,1409],{"class":1073},[1050,5034,5035],{"class":1485},"Category",[1050,5037,1454],{"class":1073},[1050,5039,5003],{"class":2669},[1050,5041,1504],{"class":1073},[1050,5043,4880],{"class":1485},[1050,5045,1314],{"class":1073},[1050,5047,5048],{"class":5012},"SET_NULL",[1050,5050,1454],{"class":1073},[1050,5052,5053],{"class":2669}," null",[1050,5055,1504],{"class":1073},[1050,5057,3906],{"class":1116},[1050,5059,1540],{"class":1073},[1050,5061,5062,5065,5067,5069,5071,5073,5075,5077,5079,5082,5084,5087,5089,5091,5094,5096],{"class":1052,"line":1200},[1050,5063,5064],{"class":1310},"    status ",[1050,5066,1504],{"class":1073},[1050,5068,4910],{"class":1310},[1050,5070,1314],{"class":1073},[1050,5072,4915],{"class":1485},[1050,5074,1409],{"class":1073},[1050,5076,4920],{"class":2669},[1050,5078,1504],{"class":1073},[1050,5080,5081],{"class":1097},"20",[1050,5083,1454],{"class":1073},[1050,5085,5086],{"class":2669}," default",[1050,5088,1504],{"class":1073},[1050,5090,1091],{"class":1083},[1050,5092,5093],{"class":1087},"draft",[1050,5095,1091],{"class":1083},[1050,5097,1540],{"class":1073},[1050,5099,5100,5103,5105,5107,5109,5112,5114,5117,5119,5122],{"class":1052,"line":1214},[1050,5101,5102],{"class":1310},"    is_featured ",[1050,5104,1504],{"class":1073},[1050,5106,4910],{"class":1310},[1050,5108,1314],{"class":1073},[1050,5110,5111],{"class":1485},"BooleanField",[1050,5113,1409],{"class":1073},[1050,5115,5116],{"class":2669},"default",[1050,5118,1504],{"class":1073},[1050,5120,5121],{"class":1116},"False",[1050,5123,1540],{"class":1073},[1050,5125,5126,5129,5131,5133,5135,5138,5140,5142,5144,5146],{"class":1052,"line":1237},[1050,5127,5128],{"class":1310},"    view_count ",[1050,5130,1504],{"class":1073},[1050,5132,4910],{"class":1310},[1050,5134,1314],{"class":1073},[1050,5136,5137],{"class":1485},"PositiveIntegerField",[1050,5139,1409],{"class":1073},[1050,5141,5116],{"class":2669},[1050,5143,1504],{"class":1073},[1050,5145,2075],{"class":1097},[1050,5147,1540],{"class":1073},[1050,5149,5150,5153,5155,5157,5159,5162,5164,5167,5169,5171],{"class":1052,"line":1258},[1050,5151,5152],{"class":1310},"    created_at ",[1050,5154,1504],{"class":1073},[1050,5156,4910],{"class":1310},[1050,5158,1314],{"class":1073},[1050,5160,5161],{"class":1485},"DateTimeField",[1050,5163,1409],{"class":1073},[1050,5165,5166],{"class":2669},"auto_now_add",[1050,5168,1504],{"class":1073},[1050,5170,3906],{"class":1116},[1050,5172,1540],{"class":1073},[1050,5174,5175,5178,5180,5182,5184,5186,5188,5191,5193,5195],{"class":1052,"line":1274},[1050,5176,5177],{"class":1310},"    updated_at ",[1050,5179,1504],{"class":1073},[1050,5181,4910],{"class":1310},[1050,5183,1314],{"class":1073},[1050,5185,5161],{"class":1485},[1050,5187,1409],{"class":1073},[1050,5189,5190],{"class":2669},"auto_now",[1050,5192,1504],{"class":1073},[1050,5194,3906],{"class":1116},[1050,5196,1540],{"class":1073},[1050,5198,5199,5202,5204,5206,5208,5210,5212,5215,5217,5219,5221,5224,5226,5228],{"class":1052,"line":1279},[1050,5200,5201],{"class":1310},"    published_at ",[1050,5203,1504],{"class":1073},[1050,5205,4910],{"class":1310},[1050,5207,1314],{"class":1073},[1050,5209,5161],{"class":1485},[1050,5211,1409],{"class":1073},[1050,5213,5214],{"class":2669},"null",[1050,5216,1504],{"class":1073},[1050,5218,3906],{"class":1116},[1050,5220,1454],{"class":1073},[1050,5222,5223],{"class":2669}," blank",[1050,5225,1504],{"class":1073},[1050,5227,3906],{"class":1116},[1050,5229,1540],{"class":1073},[1050,5231,5232],{"class":1052,"line":1284},[1050,5233,1386],{"class":1310},[1050,5235,5236,5239,5242],{"class":1052,"line":1290},[1050,5237,5238],{"class":1359},"    class",[1050,5240,5241],{"class":1362}," Meta",[1050,5243,1366],{"class":1073},[1050,5245,5246],{"class":1052,"line":1297},[1050,5247,5248],{"class":1056},"        # Composite indexes for common query patterns\n",[1050,5250,5251,5254,5256],{"class":1052,"line":1303},[1050,5252,5253],{"class":1310},"        indexes ",[1050,5255,1504],{"class":1073},[1050,5257,5258],{"class":1073}," [\n",[1050,5260,5261],{"class":1052,"line":1326},[1050,5262,5263],{"class":1056},"            # For filtering published posts by date\n",[1050,5265,5266,5269,5271,5274,5276,5279,5282,5284,5287,5289,5291,5293,5296,5298],{"class":1052,"line":1343},[1050,5267,5268],{"class":1310},"            models",[1050,5270,1314],{"class":1073},[1050,5272,5273],{"class":1485},"Index",[1050,5275,1409],{"class":1073},[1050,5277,5278],{"class":2669},"fields",[1050,5280,5281],{"class":1073},"=[",[1050,5283,1091],{"class":1083},[1050,5285,5286],{"class":1087},"status",[1050,5288,1091],{"class":1083},[1050,5290,1454],{"class":1073},[1050,5292,1164],{"class":1083},[1050,5294,5295],{"class":1087},"published_at",[1050,5297,1091],{"class":1083},[1050,5299,5300],{"class":1073},"]),\n",[1050,5302,5303],{"class":1052,"line":1351},[1050,5304,1495],{"class":1310},[1050,5306,5307],{"class":1052,"line":1356},[1050,5308,5309],{"class":1056},"            # For author's posts ordered by date\n",[1050,5311,5312,5314,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5337,5339],{"class":1052,"line":1369},[1050,5313,5268],{"class":1310},[1050,5315,1314],{"class":1073},[1050,5317,5273],{"class":1485},[1050,5319,1409],{"class":1073},[1050,5321,5278],{"class":2669},[1050,5323,5281],{"class":1073},[1050,5325,1091],{"class":1083},[1050,5327,2701],{"class":1087},[1050,5329,1091],{"class":1083},[1050,5331,1454],{"class":1073},[1050,5333,1164],{"class":1083},[1050,5335,5336],{"class":1087},"created_at",[1050,5338,1091],{"class":1083},[1050,5340,5300],{"class":1073},[1050,5342,5343],{"class":1052,"line":1383},[1050,5344,1495],{"class":1310},[1050,5346,5347],{"class":1052,"line":1389},[1050,5348,5349],{"class":1056},"            # For category posts with status\n",[1050,5351,5352,5354,5356,5358,5360,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382,5384,5386],{"class":1052,"line":1399},[1050,5353,5268],{"class":1310},[1050,5355,1314],{"class":1073},[1050,5357,5273],{"class":1485},[1050,5359,1409],{"class":1073},[1050,5361,5278],{"class":2669},[1050,5363,5281],{"class":1073},[1050,5365,1091],{"class":1083},[1050,5367,2817],{"class":1087},[1050,5369,1091],{"class":1083},[1050,5371,1454],{"class":1073},[1050,5373,1164],{"class":1083},[1050,5375,5286],{"class":1087},[1050,5377,1091],{"class":1083},[1050,5379,1454],{"class":1073},[1050,5381,1164],{"class":1083},[1050,5383,5336],{"class":1087},[1050,5385,1091],{"class":1083},[1050,5387,5300],{"class":1073},[1050,5389,5390],{"class":1052,"line":1419},[1050,5391,1495],{"class":1310},[1050,5393,5394],{"class":1052,"line":1430},[1050,5395,5396],{"class":1056},"            # For featured posts\n",[1050,5398,5399,5401,5403,5405,5407,5409,5411,5413,5416,5418,5420,5422,5424,5426],{"class":1052,"line":1436},[1050,5400,5268],{"class":1310},[1050,5402,1314],{"class":1073},[1050,5404,5273],{"class":1485},[1050,5406,1409],{"class":1073},[1050,5408,5278],{"class":2669},[1050,5410,5281],{"class":1073},[1050,5412,1091],{"class":1083},[1050,5414,5415],{"class":1087},"is_featured",[1050,5417,1091],{"class":1083},[1050,5419,1454],{"class":1073},[1050,5421,1164],{"class":1083},[1050,5423,5295],{"class":1087},[1050,5425,1091],{"class":1083},[1050,5427,5300],{"class":1073},[1050,5429,5430],{"class":1052,"line":1465},[1050,5431,1495],{"class":1310},[1050,5433,5434],{"class":1052,"line":1471},[1050,5435,5436],{"class":1056},"            # For popular posts\n",[1050,5438,5439,5441,5443,5445,5447,5449,5451,5453,5456,5458],{"class":1052,"line":1492},[1050,5440,5268],{"class":1310},[1050,5442,1314],{"class":1073},[1050,5444,5273],{"class":1485},[1050,5446,1409],{"class":1073},[1050,5448,5278],{"class":2669},[1050,5450,5281],{"class":1073},[1050,5452,1091],{"class":1083},[1050,5454,5455],{"class":1087},"view_count",[1050,5457,1091],{"class":1083},[1050,5459,5300],{"class":1073},[1050,5461,5462],{"class":1052,"line":1498},[1050,5463,1495],{"class":1310},[1050,5465,5466],{"class":1052,"line":1517},[1050,5467,5468],{"class":1056},"            # Partial index for published posts only (PostgreSQL)\n",[1050,5470,5471,5473,5475,5477],{"class":1052,"line":1543},[1050,5472,5268],{"class":1310},[1050,5474,1314],{"class":1073},[1050,5476,5273],{"class":1485},[1050,5478,3472],{"class":1073},[1050,5480,5481,5484,5486,5488,5490,5492],{"class":1052,"line":1559},[1050,5482,5483],{"class":2669},"                fields",[1050,5485,5281],{"class":1073},[1050,5487,1091],{"class":1083},[1050,5489,5336],{"class":1087},[1050,5491,1091],{"class":1083},[1050,5493,1234],{"class":1073},[1050,5495,5496,5499,5501,5503,5506,5508],{"class":1052,"line":1564},[1050,5497,5498],{"class":2669},"                name",[1050,5500,1504],{"class":1073},[1050,5502,1091],{"class":1083},[1050,5504,5505],{"class":1087},"idx_published_posts_date",[1050,5507,1091],{"class":1083},[1050,5509,1101],{"class":1073},[1050,5511,5512,5515,5517,5519,5521,5524,5526,5528,5530,5532,5535,5537],{"class":1052,"line":1570},[1050,5513,5514],{"class":2669},"                condition",[1050,5516,1504],{"class":1073},[1050,5518,4880],{"class":1485},[1050,5520,1314],{"class":1073},[1050,5522,5523],{"class":1485},"Q",[1050,5525,1409],{"class":1073},[1050,5527,5286],{"class":2669},[1050,5529,1504],{"class":1073},[1050,5531,1091],{"class":1083},[1050,5533,5534],{"class":1087},"published",[1050,5536,1091],{"class":1083},[1050,5538,1540],{"class":1073},[1050,5540,5541],{"class":1052,"line":1594},[1050,5542,5543],{"class":1073},"            ),\n",[1050,5545,5546],{"class":1052,"line":1645},[1050,5547,5548],{"class":1073},"        ]\n",[1050,5550,5551],{"class":1052,"line":1650},[1050,5552,1433],{"class":1310},[1050,5554,5555],{"class":1052,"line":1690},[1050,5556,5557],{"class":1056},"        # Default ordering uses indexed fields\n",[1050,5559,5560,5563,5565,5567,5569,5571,5573],{"class":1052,"line":1713},[1050,5561,5562],{"class":1310},"        ordering ",[1050,5564,1504],{"class":1073},[1050,5566,1225],{"class":1073},[1050,5568,1091],{"class":1083},[1050,5570,3939],{"class":1087},[1050,5572,1091],{"class":1083},[1050,5574,1834],{"class":1073},[1050,5576,5577],{"class":1052,"line":1740},[1050,5578,1294],{"emptyLinePlaceholder":1293},[1050,5580,5581,5583,5586],{"class":1052,"line":1771},[1050,5582,1157],{"class":1359},[1050,5584,5585],{"class":1362}," IndexOptimizationManager",[1050,5587,1366],{"class":1073},[1050,5589,5590,5592,5595],{"class":1052,"line":1776},[1050,5591,1373],{"class":1372},[1050,5593,5594],{"class":1376},"Manage database indexes for optimal performance",[1050,5596,1380],{"class":1372},[1050,5598,5599],{"class":1052,"line":1782},[1050,5600,1386],{"class":1310},[1050,5602,5603,5605],{"class":1052,"line":1837},[1050,5604,1392],{"class":1073},[1050,5606,1396],{"class":1395},[1050,5608,5609,5611,5614],{"class":1052,"line":1848},[1050,5610,1402],{"class":1359},[1050,5612,5613],{"class":1405}," analyze_missing_indexes",[1050,5615,2262],{"class":1073},[1050,5617,5618,5620,5623],{"class":1052,"line":1885},[1050,5619,1422],{"class":1372},[1050,5621,5622],{"class":1376},"Analyze queries to identify missing indexes",[1050,5624,1380],{"class":1372},[1050,5626,5627],{"class":1052,"line":1914},[1050,5628,1433],{"class":1310},[1050,5630,5631],{"class":1052,"line":1958},[1050,5632,5633],{"class":1056},"        # PostgreSQL: Check for sequential scans on large tables\n",[1050,5635,5636,5639,5641],{"class":1052,"line":1998},[1050,5637,5638],{"class":1310},"        missing_indexes_query ",[1050,5640,1504],{"class":1073},[1050,5642,5643],{"class":1083}," \"\"\"\n",[1050,5645,5646],{"class":1052,"line":2003},[1050,5647,5648],{"class":1087},"        SELECT \n",[1050,5650,5651],{"class":1052,"line":2009},[1050,5652,5653],{"class":1087},"            schemaname,\n",[1050,5655,5656],{"class":1052,"line":2020},[1050,5657,5658],{"class":1087},"            tablename,\n",[1050,5660,5661],{"class":1052,"line":2038},[1050,5662,5663],{"class":1087},"            seq_scan,\n",[1050,5665,5666],{"class":1052,"line":2118},[1050,5667,5668],{"class":1087},"            seq_tup_read,\n",[1050,5670,5671],{"class":1052,"line":2158},[1050,5672,5673],{"class":1087},"            idx_scan,\n",[1050,5675,5676],{"class":1052,"line":2163},[1050,5677,5678],{"class":1087},"            idx_tup_fetch,\n",[1050,5680,5681],{"class":1052,"line":2215},[1050,5682,5683],{"class":1087},"            seq_tup_read / seq_scan as avg_seq_read\n",[1050,5685,5686],{"class":1052,"line":2225},[1050,5687,5688],{"class":1087},"        FROM pg_stat_user_tables\n",[1050,5690,5691],{"class":1052,"line":2243},[1050,5692,5693],{"class":1087},"        WHERE seq_scan > 0\n",[1050,5695,5696],{"class":1052,"line":2265},[1050,5697,5698],{"class":1087},"            AND seq_tup_read / seq_scan > 1000\n",[1050,5700,5701],{"class":1052,"line":2305},[1050,5702,5703],{"class":1087},"        ORDER BY seq_tup_read DESC\n",[1050,5705,5706],{"class":1052,"line":2310},[1050,5707,5708],{"class":1083},"        \"\"\"\n",[1050,5710,5711],{"class":1052,"line":2319},[1050,5712,1433],{"class":1310},[1050,5714,5715,5718,5720,5722,5724,5726,5728,5730],{"class":1052,"line":2324},[1050,5716,5717],{"class":1306},"        with",[1050,5719,1636],{"class":1310},[1050,5721,1314],{"class":1073},[1050,5723,2410],{"class":1485},[1050,5725,2200],{"class":1073},[1050,5727,2415],{"class":1306},[1050,5729,2418],{"class":1310},[1050,5731,1366],{"class":1073},[1050,5733,5734,5737,5739,5741,5743,5746],{"class":1052,"line":2333},[1050,5735,5736],{"class":1310},"            cursor",[1050,5738,1314],{"class":1073},[1050,5740,2431],{"class":1485},[1050,5742,1409],{"class":1073},[1050,5744,5745],{"class":1485},"missing_indexes_query",[1050,5747,1540],{"class":1073},[1050,5749,5750,5752,5754,5756,5758],{"class":1052,"line":2338},[1050,5751,2313],{"class":1306},[1050,5753,2418],{"class":1310},[1050,5755,1314],{"class":1073},[1050,5757,2465],{"class":1485},[1050,5759,1489],{"class":1073},[1050,5761,5762],{"class":1052,"line":2345},[1050,5763,1386],{"class":1310},[1050,5765,5766,5768],{"class":1052,"line":2360},[1050,5767,1392],{"class":1073},[1050,5769,1396],{"class":1395},[1050,5771,5772,5774,5777],{"class":1052,"line":2370},[1050,5773,1402],{"class":1359},[1050,5775,5776],{"class":1405}," analyze_unused_indexes",[1050,5778,2262],{"class":1073},[1050,5780,5781,5783,5786],{"class":1052,"line":2375},[1050,5782,1422],{"class":1372},[1050,5784,5785],{"class":1376},"Find unused indexes that can be dropped",[1050,5787,1380],{"class":1372},[1050,5789,5790],{"class":1052,"line":2400},[1050,5791,1433],{"class":1310},[1050,5793,5794,5797,5799],{"class":1052,"line":2423},[1050,5795,5796],{"class":1310},"        unused_indexes_query ",[1050,5798,1504],{"class":1073},[1050,5800,5643],{"class":1083},[1050,5802,5803],{"class":1052,"line":2455},[1050,5804,5648],{"class":1087},[1050,5806,5807],{"class":1052,"line":2470},[1050,5808,5653],{"class":1087},[1050,5810,5811],{"class":1052,"line":2475},[1050,5812,5658],{"class":1087},[1050,5814,5815],{"class":1052,"line":2498},[1050,5816,5817],{"class":1087},"            indexname,\n",[1050,5819,5820],{"class":1052,"line":2517},[1050,5821,5673],{"class":1087},[1050,5823,5824],{"class":1052,"line":2547},[1050,5825,5826],{"class":1087},"            pg_size_pretty(pg_relation_size(indexrelid)) as size\n",[1050,5828,5829],{"class":1052,"line":2560},[1050,5830,5831],{"class":1087},"        FROM pg_stat_user_indexes\n",[1050,5833,5834],{"class":1052,"line":2565},[1050,5835,5836],{"class":1087},"        WHERE idx_scan = 0\n",[1050,5838,5839],{"class":1052,"line":2573},[1050,5840,5841],{"class":1087},"            AND indexrelname NOT LIKE '%_pkey'\n",[1050,5843,5844],{"class":1052,"line":2591},[1050,5845,5846],{"class":1087},"        ORDER BY pg_relation_size(indexrelid) DESC\n",[1050,5848,5849],{"class":1052,"line":2596},[1050,5850,5708],{"class":1083},[1050,5852,5853],{"class":1052,"line":2602},[1050,5854,1433],{"class":1310},[1050,5856,5857,5859,5861,5863,5865,5867,5869,5871],{"class":1052,"line":2616},[1050,5858,5717],{"class":1306},[1050,5860,1636],{"class":1310},[1050,5862,1314],{"class":1073},[1050,5864,2410],{"class":1485},[1050,5866,2200],{"class":1073},[1050,5868,2415],{"class":1306},[1050,5870,2418],{"class":1310},[1050,5872,1366],{"class":1073},[1050,5874,5875,5877,5879,5881,5883,5886],{"class":1052,"line":2632},[1050,5876,5736],{"class":1310},[1050,5878,1314],{"class":1073},[1050,5880,2431],{"class":1485},[1050,5882,1409],{"class":1073},[1050,5884,5885],{"class":1485},"unused_indexes_query",[1050,5887,1540],{"class":1073},[1050,5889,5890,5892,5894,5896,5898],{"class":1052,"line":2642},[1050,5891,2313],{"class":1306},[1050,5893,2418],{"class":1310},[1050,5895,1314],{"class":1073},[1050,5897,2465],{"class":1485},[1050,5899,1489],{"class":1073},[1050,5901,5902],{"class":1052,"line":2647},[1050,5903,1386],{"class":1310},[1050,5905,5906,5908],{"class":1052,"line":2679},[1050,5907,1392],{"class":1073},[1050,5909,1396],{"class":1395},[1050,5911,5912,5914,5917],{"class":1052,"line":2711},[1050,5913,1402],{"class":1359},[1050,5915,5916],{"class":1405}," create_conditional_indexes",[1050,5918,2262],{"class":1073},[1050,5920,5921,5923,5926],{"class":1052,"line":2716},[1050,5922,1422],{"class":1372},[1050,5924,5925],{"class":1376},"Create conditional indexes for specific use cases",[1050,5927,1380],{"class":1372},[1050,5929,5930],{"class":1052,"line":2722},[1050,5931,1433],{"class":1310},[1050,5933,5934,5937,5939],{"class":1052,"line":2733},[1050,5935,5936],{"class":1310},"        conditional_indexes ",[1050,5938,1504],{"class":1073},[1050,5940,5258],{"class":1073},[1050,5942,5943],{"class":1052,"line":2749},[1050,5944,5945],{"class":1056},"            # Index only for published posts\n",[1050,5947,5948],{"class":1052,"line":2763},[1050,5949,5950],{"class":1083},"            \"\"\"\n",[1050,5952,5953],{"class":1052,"line":2784},[1050,5954,5955],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_published_posts_category\n",[1050,5957,5958],{"class":1052,"line":2812},[1050,5959,5960],{"class":1087},"            ON blog_post (category_id, created_at)\n",[1050,5962,5963],{"class":1052,"line":2840},[1050,5964,5965],{"class":1087},"            WHERE status = 'published'\n",[1050,5967,5968,5970],{"class":1052,"line":2867},[1050,5969,4370],{"class":1083},[1050,5971,1101],{"class":1073},[1050,5973,5974],{"class":1052,"line":2873},[1050,5975,1495],{"class":1310},[1050,5977,5978],{"class":1052,"line":2878},[1050,5979,5980],{"class":1056},"            # Index for active users only\n",[1050,5982,5983],{"class":1052,"line":2886},[1050,5984,5950],{"class":1083},[1050,5986,5987],{"class":1052,"line":2891},[1050,5988,5989],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_active_users_login\n",[1050,5991,5992],{"class":1052,"line":2902},[1050,5993,5994],{"class":1087},"            ON auth_user (last_login)\n",[1050,5996,5997],{"class":1052,"line":2916},[1050,5998,5999],{"class":1087},"            WHERE is_active = true\n",[1050,6001,6002,6004],{"class":1052,"line":2926},[1050,6003,4370],{"class":1083},[1050,6005,1101],{"class":1073},[1050,6007,6008],{"class":1052,"line":2931},[1050,6009,1495],{"class":1310},[1050,6011,6012],{"class":1052,"line":2962},[1050,6013,6014],{"class":1056},"            # Index for recent data only\n",[1050,6016,6017],{"class":1052,"line":2991},[1050,6018,5950],{"class":1083},[1050,6020,6021],{"class":1052,"line":3009},[1050,6022,6023],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_recent_analytics\n",[1050,6025,6026],{"class":1052,"line":3014},[1050,6027,6028],{"class":1087},"            ON analytics_event (event_type, timestamp)\n",[1050,6030,6031],{"class":1052,"line":3023},[1050,6032,6033],{"class":1087},"            WHERE timestamp > NOW() - INTERVAL '30 days'\n",[1050,6035,6036,6038],{"class":1052,"line":3036},[1050,6037,4370],{"class":1083},[1050,6039,1101],{"class":1073},[1050,6041,6042],{"class":1052,"line":3047},[1050,6043,5548],{"class":1073},[1050,6045,6046],{"class":1052,"line":3066},[1050,6047,1433],{"class":1310},[1050,6049,6050,6052,6054,6056,6058,6060,6062,6064],{"class":1052,"line":3089},[1050,6051,5717],{"class":1306},[1050,6053,1636],{"class":1310},[1050,6055,1314],{"class":1073},[1050,6057,2410],{"class":1485},[1050,6059,2200],{"class":1073},[1050,6061,2415],{"class":1306},[1050,6063,2418],{"class":1310},[1050,6065,1366],{"class":1073},[1050,6067,6068,6070,6073,6075,6078],{"class":1052,"line":3112},[1050,6069,2023],{"class":1306},[1050,6071,6072],{"class":1310}," index_sql ",[1050,6074,1633],{"class":1306},[1050,6076,6077],{"class":1310}," conditional_indexes",[1050,6079,1366],{"class":1073},[1050,6081,6082,6085],{"class":1052,"line":3135},[1050,6083,6084],{"class":1306},"                try",[1050,6086,1366],{"class":1073},[1050,6088,6089,6092,6094,6096,6098,6101],{"class":1052,"line":3140},[1050,6090,6091],{"class":1310},"                    cursor",[1050,6093,1314],{"class":1073},[1050,6095,2431],{"class":1485},[1050,6097,1409],{"class":1073},[1050,6099,6100],{"class":1485},"index_sql",[1050,6102,1540],{"class":1073},[1050,6104,6105,6107,6109,6111,6114,6116,6118,6120,6122,6125,6128,6130,6132,6134],{"class":1052,"line":3145},[1050,6106,1917],{"class":1578},[1050,6108,1409],{"class":1073},[1050,6110,1658],{"class":1359},[1050,6112,6113],{"class":1087},"\"Created index: ",[1050,6115,1671],{"class":1670},[1050,6117,6100],{"class":1485},[1050,6119,1314],{"class":1073},[1050,6121,2060],{"class":1485},[1050,6123,6124],{"class":1073},"()[",[1050,6126,6127],{"class":1097},"4",[1050,6129,1949],{"class":1073},[1050,6131,1682],{"class":1670},[1050,6133,1661],{"class":1087},[1050,6135,1540],{"class":1073},[1050,6137,6138,6141,6144,6146,6149],{"class":1052,"line":4737},[1050,6139,6140],{"class":1306},"                except",[1050,6142,6143],{"class":1395}," Exception",[1050,6145,2415],{"class":1306},[1050,6147,6148],{"class":1310}," e",[1050,6150,1366],{"class":1073},[1050,6152,6153,6155,6157,6159,6162,6164,6167,6169,6171],{"class":1052,"line":4762},[1050,6154,1917],{"class":1578},[1050,6156,1409],{"class":1073},[1050,6158,1658],{"class":1359},[1050,6160,6161],{"class":1087},"\"Error creating index: ",[1050,6163,1671],{"class":1670},[1050,6165,6166],{"class":1485},"e",[1050,6168,1682],{"class":1670},[1050,6170,1661],{"class":1087},[1050,6172,1540],{"class":1073},[1050,6174,6175],{"class":1052,"line":4767},[1050,6176,1386],{"class":1310},[1050,6178,6179,6181],{"class":1052,"line":4780},[1050,6180,1392],{"class":1073},[1050,6182,1396],{"class":1395},[1050,6184,6186,6188,6191],{"class":1052,"line":6185},132,[1050,6187,1402],{"class":1359},[1050,6189,6190],{"class":1405}," optimize_text_search_indexes",[1050,6192,2262],{"class":1073},[1050,6194,6196,6198,6201],{"class":1052,"line":6195},133,[1050,6197,1422],{"class":1372},[1050,6199,6200],{"class":1376},"Create indexes for text search optimization",[1050,6202,1380],{"class":1372},[1050,6204,6206],{"class":1052,"line":6205},134,[1050,6207,1433],{"class":1310},[1050,6209,6211],{"class":1052,"line":6210},135,[1050,6212,6213],{"class":1056},"        # PostgreSQL GIN indexes for full-text search\n",[1050,6215,6217,6220,6222],{"class":1052,"line":6216},136,[1050,6218,6219],{"class":1310},"        text_search_indexes ",[1050,6221,1504],{"class":1073},[1050,6223,5258],{"class":1073},[1050,6225,6227],{"class":1052,"line":6226},137,[1050,6228,6229],{"class":1056},"            # Full-text search on title and content\n",[1050,6231,6233],{"class":1052,"line":6232},138,[1050,6234,5950],{"class":1083},[1050,6236,6238],{"class":1052,"line":6237},139,[1050,6239,6240],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_post_fulltext\n",[1050,6242,6244],{"class":1052,"line":6243},140,[1050,6245,6246],{"class":1087},"            ON blog_post USING GIN (to_tsvector('english', title || ' ' || content))\n",[1050,6248,6250,6252],{"class":1052,"line":6249},141,[1050,6251,4370],{"class":1083},[1050,6253,1101],{"class":1073},[1050,6255,6257],{"class":1052,"line":6256},142,[1050,6258,1495],{"class":1310},[1050,6260,6262],{"class":1052,"line":6261},143,[1050,6263,6264],{"class":1056},"            # Trigram index for fuzzy matching\n",[1050,6266,6268],{"class":1052,"line":6267},144,[1050,6269,5950],{"class":1083},[1050,6271,6273],{"class":1052,"line":6272},145,[1050,6274,6275],{"class":1087},"            CREATE EXTENSION IF NOT EXISTS pg_trgm;\n",[1050,6277,6279],{"class":1052,"line":6278},146,[1050,6280,6281],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_post_title_trgm\n",[1050,6283,6285],{"class":1052,"line":6284},147,[1050,6286,6287],{"class":1087},"            ON blog_post USING GIN (title gin_trgm_ops)\n",[1050,6289,6291,6293],{"class":1052,"line":6290},148,[1050,6292,4370],{"class":1083},[1050,6294,1101],{"class":1073},[1050,6296,6298],{"class":1052,"line":6297},149,[1050,6299,1495],{"class":1310},[1050,6301,6303],{"class":1052,"line":6302},150,[1050,6304,6305],{"class":1056},"            # JSON field indexing\n",[1050,6307,6309],{"class":1052,"line":6308},151,[1050,6310,5950],{"class":1083},[1050,6312,6314],{"class":1052,"line":6313},152,[1050,6315,6316],{"class":1087},"            CREATE INDEX CONCURRENTLY idx_post_metadata_gin\n",[1050,6318,6320],{"class":1052,"line":6319},153,[1050,6321,6322],{"class":1087},"            ON blog_post USING GIN (metadata)\n",[1050,6324,6326,6328],{"class":1052,"line":6325},154,[1050,6327,4370],{"class":1083},[1050,6329,1101],{"class":1073},[1050,6331,6333],{"class":1052,"line":6332},155,[1050,6334,5548],{"class":1073},[1050,6336,6338],{"class":1052,"line":6337},156,[1050,6339,1433],{"class":1310},[1050,6341,6343,6345,6347,6349,6351,6353,6355,6357],{"class":1052,"line":6342},157,[1050,6344,5717],{"class":1306},[1050,6346,1636],{"class":1310},[1050,6348,1314],{"class":1073},[1050,6350,2410],{"class":1485},[1050,6352,2200],{"class":1073},[1050,6354,2415],{"class":1306},[1050,6356,2418],{"class":1310},[1050,6358,1366],{"class":1073},[1050,6360,6362,6364,6366,6368,6371],{"class":1052,"line":6361},158,[1050,6363,2023],{"class":1306},[1050,6365,6072],{"class":1310},[1050,6367,1633],{"class":1306},[1050,6369,6370],{"class":1310}," text_search_indexes",[1050,6372,1366],{"class":1073},[1050,6374,6376,6378],{"class":1052,"line":6375},159,[1050,6377,6084],{"class":1306},[1050,6379,1366],{"class":1073},[1050,6381,6383,6385,6387,6389,6391,6393],{"class":1052,"line":6382},160,[1050,6384,6091],{"class":1310},[1050,6386,1314],{"class":1073},[1050,6388,2431],{"class":1485},[1050,6390,1409],{"class":1073},[1050,6392,6100],{"class":1485},[1050,6394,1540],{"class":1073},[1050,6396,6398,6400,6402,6404,6407],{"class":1052,"line":6397},161,[1050,6399,1917],{"class":1578},[1050,6401,1409],{"class":1073},[1050,6403,1658],{"class":1359},[1050,6405,6406],{"class":1087},"\"Created text search index\"",[1050,6408,1540],{"class":1073},[1050,6410,6412,6414,6416,6418,6420],{"class":1052,"line":6411},162,[1050,6413,6140],{"class":1306},[1050,6415,6143],{"class":1395},[1050,6417,2415],{"class":1306},[1050,6419,6148],{"class":1310},[1050,6421,1366],{"class":1073},[1050,6423,6425,6427,6429,6431,6434,6436,6438,6440,6442],{"class":1052,"line":6424},163,[1050,6426,1917],{"class":1578},[1050,6428,1409],{"class":1073},[1050,6430,1658],{"class":1359},[1050,6432,6433],{"class":1087},"\"Error creating text search index: ",[1050,6435,1671],{"class":1670},[1050,6437,6166],{"class":1485},[1050,6439,1682],{"class":1670},[1050,6441,1661],{"class":1087},[1050,6443,1540],{"class":1073},[1050,6445,6447],{"class":1052,"line":6446},164,[1050,6448,1294],{"emptyLinePlaceholder":1293},[1050,6450,6452],{"class":1052,"line":6451},165,[1050,6453,6454],{"class":1056},"# Index monitoring and maintenance\n",[1050,6456,6458,6460,6463],{"class":1052,"line":6457},166,[1050,6459,1157],{"class":1359},[1050,6461,6462],{"class":1362}," IndexMaintenanceManager",[1050,6464,1366],{"class":1073},[1050,6466,6468,6470,6473],{"class":1052,"line":6467},167,[1050,6469,1373],{"class":1372},[1050,6471,6472],{"class":1376},"Monitor and maintain database indexes",[1050,6474,1380],{"class":1372},[1050,6476,6478],{"class":1052,"line":6477},168,[1050,6479,1386],{"class":1310},[1050,6481,6483,6485],{"class":1052,"line":6482},169,[1050,6484,1392],{"class":1073},[1050,6486,1396],{"class":1395},[1050,6488,6490,6492,6495],{"class":1052,"line":6489},170,[1050,6491,1402],{"class":1359},[1050,6493,6494],{"class":1405}," get_index_usage_stats",[1050,6496,2262],{"class":1073},[1050,6498,6500,6502,6505],{"class":1052,"line":6499},171,[1050,6501,1422],{"class":1372},[1050,6503,6504],{"class":1376},"Get comprehensive index usage statistics",[1050,6506,1380],{"class":1372},[1050,6508,6510],{"class":1052,"line":6509},172,[1050,6511,1433],{"class":1310},[1050,6513,6515,6518,6520],{"class":1052,"line":6514},173,[1050,6516,6517],{"class":1310},"        index_stats_query ",[1050,6519,1504],{"class":1073},[1050,6521,5643],{"class":1083},[1050,6523,6525],{"class":1052,"line":6524},174,[1050,6526,5648],{"class":1087},[1050,6528,6530],{"class":1052,"line":6529},175,[1050,6531,6532],{"class":1087},"            t.schemaname,\n",[1050,6534,6536],{"class":1052,"line":6535},176,[1050,6537,6538],{"class":1087},"            t.tablename,\n",[1050,6540,6542],{"class":1052,"line":6541},177,[1050,6543,6544],{"class":1087},"            i.indexname,\n",[1050,6546,6548],{"class":1052,"line":6547},178,[1050,6549,6550],{"class":1087},"            i.idx_scan,\n",[1050,6552,6554],{"class":1052,"line":6553},179,[1050,6555,6556],{"class":1087},"            i.idx_tup_read,\n",[1050,6558,6560],{"class":1052,"line":6559},180,[1050,6561,6562],{"class":1087},"            i.idx_tup_fetch,\n",[1050,6564,6566],{"class":1052,"line":6565},181,[1050,6567,6568],{"class":1087},"            pg_size_pretty(pg_relation_size(i.indexrelid)) as size,\n",[1050,6570,6572],{"class":1052,"line":6571},182,[1050,6573,6574],{"class":1087},"            pg_relation_size(i.indexrelid) as size_bytes,\n",[1050,6576,6578],{"class":1052,"line":6577},183,[1050,6579,6580],{"class":1087},"            CASE \n",[1050,6582,6584],{"class":1052,"line":6583},184,[1050,6585,6586],{"class":1087},"                WHEN i.idx_scan = 0 THEN 'Unused'\n",[1050,6588,6590],{"class":1052,"line":6589},185,[1050,6591,6592],{"class":1087},"                WHEN i.idx_scan \u003C 100 THEN 'Low Usage'\n",[1050,6594,6596],{"class":1052,"line":6595},186,[1050,6597,6598],{"class":1087},"                WHEN i.idx_scan \u003C 1000 THEN 'Medium Usage'\n",[1050,6600,6602],{"class":1052,"line":6601},187,[1050,6603,6604],{"class":1087},"                ELSE 'High Usage'\n",[1050,6606,6608],{"class":1052,"line":6607},188,[1050,6609,6610],{"class":1087},"            END as usage_category\n",[1050,6612,6614],{"class":1052,"line":6613},189,[1050,6615,6616],{"class":1087},"        FROM pg_stat_user_indexes i\n",[1050,6618,6620],{"class":1052,"line":6619},190,[1050,6621,6622],{"class":1087},"        JOIN pg_stat_user_tables t ON i.relid = t.relid\n",[1050,6624,6626],{"class":1052,"line":6625},191,[1050,6627,6628],{"class":1087},"        ORDER BY i.idx_scan DESC, pg_relation_size(i.indexrelid) DESC\n",[1050,6630,6632],{"class":1052,"line":6631},192,[1050,6633,5708],{"class":1083},[1050,6635,6637],{"class":1052,"line":6636},193,[1050,6638,1433],{"class":1310},[1050,6640,6642,6644,6646,6648,6650,6652,6654,6656],{"class":1052,"line":6641},194,[1050,6643,5717],{"class":1306},[1050,6645,1636],{"class":1310},[1050,6647,1314],{"class":1073},[1050,6649,2410],{"class":1485},[1050,6651,2200],{"class":1073},[1050,6653,2415],{"class":1306},[1050,6655,2418],{"class":1310},[1050,6657,1366],{"class":1073},[1050,6659,6661,6663,6665,6667,6669,6672],{"class":1052,"line":6660},195,[1050,6662,5736],{"class":1310},[1050,6664,1314],{"class":1073},[1050,6666,2431],{"class":1485},[1050,6668,1409],{"class":1073},[1050,6670,6671],{"class":1485},"index_stats_query",[1050,6673,1540],{"class":1073},[1050,6675,6677,6680,6682,6684,6687,6689,6691,6693,6695,6698,6700,6702,6704,6707],{"class":1052,"line":6676},196,[1050,6678,6679],{"class":1310},"            columns ",[1050,6681,1504],{"class":1073},[1050,6683,1225],{"class":1073},[1050,6685,6686],{"class":1310},"desc",[1050,6688,1615],{"class":1073},[1050,6690,2075],{"class":1097},[1050,6692,1949],{"class":1073},[1050,6694,1627],{"class":1306},[1050,6696,6697],{"class":1310}," desc ",[1050,6699,1633],{"class":1306},[1050,6701,2418],{"class":1310},[1050,6703,1314],{"class":1073},[1050,6705,6706],{"class":1479},"description",[1050,6708,1834],{"class":1073},[1050,6710,6712,6714,6716,6719,6721,6724,6726,6729,6731,6734,6737,6739,6742,6744,6746,6748,6750],{"class":1052,"line":6711},197,[1050,6713,2313],{"class":1306},[1050,6715,1225],{"class":1073},[1050,6717,6718],{"class":1395},"dict",[1050,6720,1409],{"class":1073},[1050,6722,6723],{"class":1578},"zip",[1050,6725,1409],{"class":1073},[1050,6727,6728],{"class":1485},"columns",[1050,6730,1454],{"class":1073},[1050,6732,6733],{"class":1485}," row",[1050,6735,6736],{"class":1073},"))",[1050,6738,1627],{"class":1306},[1050,6740,6741],{"class":1310}," row ",[1050,6743,1633],{"class":1306},[1050,6745,2418],{"class":1310},[1050,6747,1314],{"class":1073},[1050,6749,2465],{"class":1485},[1050,6751,6752],{"class":1073},"()]\n",[1050,6754,6756],{"class":1052,"line":6755},198,[1050,6757,1386],{"class":1310},[1050,6759,6761,6763],{"class":1052,"line":6760},199,[1050,6762,1392],{"class":1073},[1050,6764,1396],{"class":1395},[1050,6766,6768,6770,6773],{"class":1052,"line":6767},200,[1050,6769,1402],{"class":1359},[1050,6771,6772],{"class":1405}," reindex_fragmented_indexes",[1050,6774,2262],{"class":1073},[1050,6776,6778,6780,6783],{"class":1052,"line":6777},201,[1050,6779,1422],{"class":1372},[1050,6781,6782],{"class":1376},"Reindex fragmented indexes",[1050,6784,1380],{"class":1372},[1050,6786,6788],{"class":1052,"line":6787},202,[1050,6789,1433],{"class":1310},[1050,6791,6793],{"class":1052,"line":6792},203,[1050,6794,6795],{"class":1056},"        # Find fragmented indexes (PostgreSQL)\n",[1050,6797,6799,6802,6804],{"class":1052,"line":6798},204,[1050,6800,6801],{"class":1310},"        fragmentation_query ",[1050,6803,1504],{"class":1073},[1050,6805,5643],{"class":1083},[1050,6807,6809],{"class":1052,"line":6808},205,[1050,6810,5648],{"class":1087},[1050,6812,6814],{"class":1052,"line":6813},206,[1050,6815,5653],{"class":1087},[1050,6817,6819],{"class":1052,"line":6818},207,[1050,6820,5658],{"class":1087},[1050,6822,6824],{"class":1052,"line":6823},208,[1050,6825,5817],{"class":1087},[1050,6827,6829],{"class":1052,"line":6828},209,[1050,6830,5826],{"class":1087},[1050,6832,6834],{"class":1052,"line":6833},210,[1050,6835,5831],{"class":1087},[1050,6837,6839],{"class":1052,"line":6838},211,[1050,6840,6841],{"class":1087},"        WHERE idx_scan > 1000  -- Only reindex used indexes\n",[1050,6843,6845],{"class":1052,"line":6844},212,[1050,6846,5846],{"class":1087},[1050,6848,6850],{"class":1052,"line":6849},213,[1050,6851,5708],{"class":1083},[1050,6853,6855],{"class":1052,"line":6854},214,[1050,6856,1433],{"class":1310},[1050,6858,6860,6862,6864,6866,6868,6870,6872,6874],{"class":1052,"line":6859},215,[1050,6861,5717],{"class":1306},[1050,6863,1636],{"class":1310},[1050,6865,1314],{"class":1073},[1050,6867,2410],{"class":1485},[1050,6869,2200],{"class":1073},[1050,6871,2415],{"class":1306},[1050,6873,2418],{"class":1310},[1050,6875,1366],{"class":1073},[1050,6877,6879,6881,6883,6885,6887,6890],{"class":1052,"line":6878},216,[1050,6880,5736],{"class":1310},[1050,6882,1314],{"class":1073},[1050,6884,2431],{"class":1485},[1050,6886,1409],{"class":1073},[1050,6888,6889],{"class":1485},"fragmentation_query",[1050,6891,1540],{"class":1073},[1050,6893,6895,6898,6900,6902,6904,6906],{"class":1052,"line":6894},217,[1050,6896,6897],{"class":1310},"            indexes_to_reindex ",[1050,6899,1504],{"class":1073},[1050,6901,2418],{"class":1310},[1050,6903,1314],{"class":1073},[1050,6905,2465],{"class":1485},[1050,6907,1489],{"class":1073},[1050,6909,6911],{"class":1052,"line":6910},218,[1050,6912,1495],{"class":1310},[1050,6914,6916,6918,6921,6923,6926,6928,6931,6933,6936,6938,6941],{"class":1052,"line":6915},219,[1050,6917,2023],{"class":1306},[1050,6919,6920],{"class":1310}," schema",[1050,6922,1454],{"class":1073},[1050,6924,6925],{"class":1310}," table",[1050,6927,1454],{"class":1073},[1050,6929,6930],{"class":1310}," index",[1050,6932,1454],{"class":1073},[1050,6934,6935],{"class":1310}," size ",[1050,6937,1633],{"class":1306},[1050,6939,6940],{"class":1310}," indexes_to_reindex",[1050,6942,1366],{"class":1073},[1050,6944,6946,6948],{"class":1052,"line":6945},220,[1050,6947,6084],{"class":1306},[1050,6949,1366],{"class":1073},[1050,6951,6953,6955,6957,6959,6961,6963,6966,6968,6971,6973,6975],{"class":1052,"line":6952},221,[1050,6954,6091],{"class":1310},[1050,6956,1314],{"class":1073},[1050,6958,2431],{"class":1485},[1050,6960,1409],{"class":1073},[1050,6962,1658],{"class":1359},[1050,6964,6965],{"class":1087},"\"REINDEX INDEX CONCURRENTLY ",[1050,6967,1671],{"class":1670},[1050,6969,6970],{"class":1485},"index",[1050,6972,1682],{"class":1670},[1050,6974,1661],{"class":1087},[1050,6976,1540],{"class":1073},[1050,6978,6980,6982,6984,6986,6989,6991,6993,6995,6998,7000,7003,7005,7008],{"class":1052,"line":6979},222,[1050,6981,1917],{"class":1578},[1050,6983,1409],{"class":1073},[1050,6985,1658],{"class":1359},[1050,6987,6988],{"class":1087},"\"Reindexed ",[1050,6990,1671],{"class":1670},[1050,6992,6970],{"class":1485},[1050,6994,1682],{"class":1670},[1050,6996,6997],{"class":1087}," (",[1050,6999,1671],{"class":1670},[1050,7001,7002],{"class":1485},"size",[1050,7004,1682],{"class":1670},[1050,7006,7007],{"class":1087},")\"",[1050,7009,1540],{"class":1073},[1050,7011,7013,7015,7017,7019,7021],{"class":1052,"line":7012},223,[1050,7014,6140],{"class":1306},[1050,7016,6143],{"class":1395},[1050,7018,2415],{"class":1306},[1050,7020,6148],{"class":1310},[1050,7022,1366],{"class":1073},[1050,7024,7026,7028,7030,7032,7035,7037,7039,7041,7043,7045,7047,7049,7051],{"class":1052,"line":7025},224,[1050,7027,1917],{"class":1578},[1050,7029,1409],{"class":1073},[1050,7031,1658],{"class":1359},[1050,7033,7034],{"class":1087},"\"Error reindexing ",[1050,7036,1671],{"class":1670},[1050,7038,6970],{"class":1485},[1050,7040,1682],{"class":1670},[1050,7042,4801],{"class":1087},[1050,7044,1671],{"class":1670},[1050,7046,6166],{"class":1485},[1050,7048,1682],{"class":1670},[1050,7050,1661],{"class":1087},[1050,7052,1540],{"class":1073},[1050,7054,7056],{"class":1052,"line":7055},225,[1050,7057,1386],{"class":1310},[1050,7059,7061,7063],{"class":1052,"line":7060},226,[1050,7062,1392],{"class":1073},[1050,7064,1396],{"class":1395},[1050,7066,7068,7070,7073],{"class":1052,"line":7067},227,[1050,7069,1402],{"class":1359},[1050,7071,7072],{"class":1405}," analyze_table_statistics",[1050,7074,2262],{"class":1073},[1050,7076,7078,7080,7083],{"class":1052,"line":7077},228,[1050,7079,1422],{"class":1372},[1050,7081,7082],{"class":1376},"Update table statistics for query planner",[1050,7084,1380],{"class":1372},[1050,7086,7088],{"class":1052,"line":7087},229,[1050,7089,1433],{"class":1310},[1050,7091,7093,7095,7097,7099,7101,7103,7105,7107],{"class":1052,"line":7092},230,[1050,7094,5717],{"class":1306},[1050,7096,1636],{"class":1310},[1050,7098,1314],{"class":1073},[1050,7100,2410],{"class":1485},[1050,7102,2200],{"class":1073},[1050,7104,2415],{"class":1306},[1050,7106,2418],{"class":1310},[1050,7108,1366],{"class":1073},[1050,7110,7112],{"class":1052,"line":7111},231,[1050,7113,7114],{"class":1056},"            # PostgreSQL: Update statistics\n",[1050,7116,7118,7120,7122,7124,7126,7128,7131,7133],{"class":1052,"line":7117},232,[1050,7119,5736],{"class":1310},[1050,7121,1314],{"class":1073},[1050,7123,2431],{"class":1485},[1050,7125,1409],{"class":1073},[1050,7127,1661],{"class":1083},[1050,7129,7130],{"class":1087},"ANALYZE",[1050,7132,1661],{"class":1083},[1050,7134,1540],{"class":1073},[1050,7136,7138],{"class":1052,"line":7137},233,[1050,7139,1495],{"class":1310},[1050,7141,7143],{"class":1052,"line":7142},234,[1050,7144,7145],{"class":1056},"            # Get table statistics\n",[1050,7147,7149,7152,7154],{"class":1052,"line":7148},235,[1050,7150,7151],{"class":1310},"            stats_query ",[1050,7153,1504],{"class":1073},[1050,7155,5643],{"class":1083},[1050,7157,7159],{"class":1052,"line":7158},236,[1050,7160,7161],{"class":1087},"            SELECT \n",[1050,7163,7165],{"class":1052,"line":7164},237,[1050,7166,7167],{"class":1087},"                schemaname,\n",[1050,7169,7171],{"class":1052,"line":7170},238,[1050,7172,7173],{"class":1087},"                tablename,\n",[1050,7175,7177],{"class":1052,"line":7176},239,[1050,7178,7179],{"class":1087},"                n_live_tup,\n",[1050,7181,7183],{"class":1052,"line":7182},240,[1050,7184,7185],{"class":1087},"                n_dead_tup,\n",[1050,7187,7189],{"class":1052,"line":7188},241,[1050,7190,7191],{"class":1087},"                last_vacuum,\n",[1050,7193,7195],{"class":1052,"line":7194},242,[1050,7196,7197],{"class":1087},"                last_autovacuum,\n",[1050,7199,7201],{"class":1052,"line":7200},243,[1050,7202,7203],{"class":1087},"                last_analyze,\n",[1050,7205,7207],{"class":1052,"line":7206},244,[1050,7208,7209],{"class":1087},"                last_autoanalyze\n",[1050,7211,7213],{"class":1052,"line":7212},245,[1050,7214,7215],{"class":1087},"            FROM pg_stat_user_tables\n",[1050,7217,7219],{"class":1052,"line":7218},246,[1050,7220,7221],{"class":1087},"            ORDER BY n_live_tup DESC\n",[1050,7223,7225],{"class":1052,"line":7224},247,[1050,7226,5950],{"class":1083},[1050,7228,7230],{"class":1052,"line":7229},248,[1050,7231,1495],{"class":1310},[1050,7233,7235,7237,7239,7241,7243,7246],{"class":1052,"line":7234},249,[1050,7236,5736],{"class":1310},[1050,7238,1314],{"class":1073},[1050,7240,2431],{"class":1485},[1050,7242,1409],{"class":1073},[1050,7244,7245],{"class":1485},"stats_query",[1050,7247,1540],{"class":1073},[1050,7249,7251,7253,7255,7257,7259],{"class":1052,"line":7250},250,[1050,7252,2313],{"class":1306},[1050,7254,2418],{"class":1310},[1050,7256,1314],{"class":1073},[1050,7258,2465],{"class":1485},[1050,7260,1489],{"class":1073},[1030,7262,7264],{"id":7263},"query-optimization-techniques","Query Optimization Techniques",[1035,7266,7268],{"id":7267},"advanced-query-patterns","Advanced Query Patterns",[1040,7270,7272],{"className":1042,"code":7271,"language":1044,"meta":1045,"style":1045},"from django.db.models import Q, F, Case, When, Value, Exists, OuterRef, Subquery\n\nclass AdvancedQueryOptimization:\n    \"\"\"Advanced query optimization techniques\"\"\"\n    \n    @staticmethod\n    def optimize_exists_queries():\n        \"\"\"Use EXISTS instead of IN for better performance\"\"\"\n        \n        # Bad: Using IN with subquery (can be slow for large datasets)\n        popular_categories = Category.objects.filter(\n            id__in=Post.objects.filter(view_count__gt=1000).values('category_id')\n        )\n        \n        # Good: Using EXISTS (often faster)\n        popular_categories = Category.objects.filter(\n            Exists(Post.objects.filter(category=OuterRef('pk'), view_count__gt=1000))\n        )\n        \n        return popular_categories\n    \n    @staticmethod\n    def optimize_count_queries():\n        \"\"\"Optimize counting queries\"\"\"\n        \n        # Bad: count() on large tables\n        total_posts = Post.objects.count()  # Can be slow on large tables\n        \n        # Good: Use aggregation or estimation for large datasets\n        from django.db.models import Count\n        \n        # For approximate counts (PostgreSQL)\n        with connection.cursor() as cursor:\n            cursor.execute(\"\"\"\n                SELECT reltuples::BIGINT AS estimate\n                FROM pg_class\n                WHERE relname = 'blog_post'\n            \"\"\")\n            approximate_count = cursor.fetchone()[0]\n        \n        # For conditional counts, use aggregation\n        category_stats = Category.objects.annotate(\n            post_count=Count('posts'),\n            published_count=Count('posts', filter=Q(posts__status='published'))\n        )\n        \n        return category_stats\n    \n    @staticmethod\n    def optimize_pagination():\n        \"\"\"Optimize pagination for large datasets\"\"\"\n        \n        # Bad: OFFSET pagination (slow for large offsets)\n        def bad_pagination(page, per_page=20):\n            offset = (page - 1) * per_page\n            return Post.objects.all()[offset:offset + per_page]\n        \n        # Good: Cursor-based pagination\n        def cursor_pagination(cursor_id=None, per_page=20):\n            queryset = Post.objects.order_by('-id')\n            \n            if cursor_id:\n                queryset = queryset.filter(id__lt=cursor_id)\n            \n            posts = list(queryset[:per_page + 1])\n            \n            has_next = len(posts) > per_page\n            if has_next:\n                posts = posts[:-1]\n            \n            next_cursor = posts[-1].id if posts and has_next else None\n            \n            return {\n                'posts': posts,\n                'next_cursor': next_cursor,\n                'has_next': has_next\n            }\n    \n    @staticmethod\n    def optimize_complex_filters():\n        \"\"\"Optimize complex filtering operations\"\"\"\n        \n        # Use database functions instead of Python processing\n        from django.db.models.functions import Extract, TruncDate\n        \n        # Bad: Filter in Python\n        def bad_date_filtering():\n            posts = Post.objects.all()\n            recent_posts = [p for p in posts if p.created_at.year == 2023]\n            return recent_posts\n        \n        # Good: Filter in database\n        def good_date_filtering():\n            return Post.objects.filter(created_at__year=2023)\n        \n        # Use annotations for complex calculations\n        posts_with_metrics = Post.objects.annotate(\n            # Calculate engagement score in database\n            engagement_score=F('view_count') + F('like_count') * 2,\n            \n            # Extract date parts\n            created_year=Extract('created_at', 'year'),\n            created_month=Extract('created_at', 'month'),\n            \n            # Conditional values\n            popularity_tier=Case(\n                When(view_count__gte=10000, then=Value('high')),\n                When(view_count__gte=1000, then=Value('medium')),\n                default=Value('low')\n            )\n        ).filter(engagement_score__gte=100)\n        \n        return posts_with_metrics\n    \n    @staticmethod\n    def optimize_bulk_operations():\n        \"\"\"Optimize bulk create, update, and delete operations\"\"\"\n        \n        # Bulk create\n        def bulk_create_posts(posts_data):\n            posts = [\n                Post(\n                    title=data['title'],\n                    content=data['content'],\n                    author_id=data['author_id']\n                )\n                for data in posts_data\n            ]\n            \n            return Post.objects.bulk_create(posts, batch_size=1000)\n        \n        # Bulk update\n        def bulk_update_view_counts(post_updates):\n            posts_to_update = []\n            \n            for post_id, increment in post_updates.items():\n                post = Post(id=post_id)\n                post.view_count = F('view_count') + increment\n                posts_to_update.append(post)\n            \n            return Post.objects.bulk_update(\n                posts_to_update,\n                ['view_count'],\n                batch_size=1000\n            )\n        \n        # Efficient bulk delete with chunking\n        def bulk_delete_old_posts(cutoff_date, chunk_size=1000):\n            total_deleted = 0\n            \n            while True:\n                # Get IDs to delete in chunks\n                ids_to_delete = list(\n                    Post.objects.filter(created_at__lt=cutoff_date)\n                               .values_list('id', flat=True)[:chunk_size]\n                )\n                \n                if not ids_to_delete:\n                    break\n                \n                # Delete chunk\n                deleted_count = Post.objects.filter(id__in=ids_to_delete).delete()[0]\n                total_deleted += deleted_count\n                \n                if len(ids_to_delete) \u003C chunk_size:\n                    break\n            \n            return total_deleted\n\n# Query caching strategies\nclass QueryCachingOptimization:\n    \"\"\"Implement query caching for performance\"\"\"\n    \n    @staticmethod\n    def cache_expensive_queries():\n        \"\"\"Cache results of expensive queries\"\"\"\n        \n        from django.core.cache import cache\n        \n        def get_popular_posts(cache_timeout=300):\n            cache_key = 'popular_posts'\n            cached_posts = cache.get(cache_key)\n            \n            if cached_posts is None:\n                # Expensive query\n                cached_posts = list(\n                    Post.objects.select_related('author', 'category')\n                               .annotate(\n                                   comment_count=Count('comments'),\n                                   engagement_score=F('view_count') + Count('comments') * 5\n                               )\n                               .filter(engagement_score__gte=100)\n                               .order_by('-engagement_score')[:20]\n                )\n                \n                cache.set(cache_key, cached_posts, cache_timeout)\n            \n            return cached_posts\n    \n    @staticmethod\n    def implement_query_result_caching():\n        \"\"\"Implement automatic query result caching\"\"\"\n        \n        class CachedQuerySet(models.QuerySet):\n            def cache_key(self):\n                \"\"\"Generate cache key from query\"\"\"\n                import hashlib\n                query_str = str(self.query)\n                return f\"queryset_{hashlib.md5(query_str.encode()).hexdigest()}\"\n            \n            def cached(self, timeout=300):\n                \"\"\"Return cached results if available\"\"\"\n                cache_key = self.cache_key()\n                cached_result = cache.get(cache_key)\n                \n                if cached_result is None:\n                    cached_result = list(self)\n                    cache.set(cache_key, cached_result, timeout)\n                \n                return cached_result\n        \n        class CachedManager(models.Manager):\n            def get_queryset(self):\n                return CachedQuerySet(self.model, using=self._db)\n        \n        # Usage in model\n        class CachedPost(Post):\n            cached_objects = CachedManager()\n            \n            class Meta:\n                proxy = True\n        \n        # Usage\n        # popular_posts = CachedPost.cached_objects.filter(view_count__gte=1000).cached()\n    \n    @staticmethod\n    def invalidate_related_caches():\n        \"\"\"Invalidate caches when data changes\"\"\"\n        \n        from django.db.models.signals import post_save, post_delete\n        from django.dispatch import receiver\n        \n        @receiver([post_save, post_delete], sender=Post)\n        def invalidate_post_caches(sender, **kwargs):\n            \"\"\"Invalidate post-related caches\"\"\"\n            \n            cache_keys_to_invalidate = [\n                'popular_posts',\n                'recent_posts',\n                'featured_posts',\n            ]\n            \n            for key in cache_keys_to_invalidate:\n                cache.delete(key)\n            \n            # Invalidate category-specific caches\n            instance = kwargs.get('instance')\n            if instance and instance.category:\n                cache.delete(f'category_posts_{instance.category.id}')\n\n# Database connection optimization\nclass ConnectionOptimization:\n    \"\"\"Optimize database connections\"\"\"\n    \n    @staticmethod\n    def configure_connection_pooling():\n        \"\"\"Configure connection pooling for better performance\"\"\"\n        \n        # Example configuration for django-db-pool\n        connection_pool_settings = {\n            'default': {\n                'ENGINE': 'django_db_pool.backends.postgresql',\n                'NAME': 'myapp_db',\n                'USER': 'postgres',\n                'PASSWORD': 'password',\n                'HOST': 'localhost',\n                'PORT': '5432',\n                'POOL_OPTIONS': {\n                    'POOL_SIZE': 20,\n                    'MAX_OVERFLOW': 30,\n                    'RECYCLE': 3600,  # Recycle connections after 1 hour\n                    'PRE_PING': True,  # Validate connections before use\n                },\n            }\n        }\n        \n        return connection_pool_settings\n    \n    @staticmethod\n    def optimize_connection_settings():\n        \"\"\"Optimize database connection settings\"\"\"\n        \n        optimized_settings = {\n            'default': {\n                'ENGINE': 'django.db.backends.postgresql',\n                'OPTIONS': {\n                    # Connection settings\n                    'MAX_CONNS': 20,\n                    'connect_timeout': 10,\n                    \n                    # Performance settings\n                    'init_command': \"\"\"\n                        SET default_transaction_isolation TO 'read committed';\n                        SET timezone TO 'UTC';\n                        SET shared_preload_libraries TO 'pg_stat_statements';\n                    \"\"\",\n                    \n                    # Memory settings\n                    'work_mem': '256MB',\n                    'shared_buffers': '1GB',\n                    'effective_cache_size': '4GB',\n                },\n            }\n        }\n        \n        return optimized_settings\n",[1047,7273,7274,7328,7332,7341,7350,7354,7360,7369,7378,7382,7387,7407,7450,7455,7459,7464,7482,7530,7534,7538,7545,7549,7555,7564,7573,7577,7582,7604,7608,7613,7632,7636,7641,7659,7671,7676,7681,7686,7692,7712,7716,7721,7740,7759,7800,7804,7808,7815,7819,7825,7834,7843,7847,7852,7875,7899,7930,7934,7939,7966,7994,7998,8007,8032,8036,8061,8065,8084,8093,8111,8115,8151,8155,8161,8175,8191,8205,8210,8214,8220,8229,8238,8242,8247,8276,8280,8285,8294,8312,8355,8362,8366,8371,8380,8406,8410,8415,8434,8439,8480,8484,8489,8517,8545,8549,8554,8566,8603,8634,8654,8658,8675,8679,8686,8690,8696,8705,8714,8718,8723,8737,8745,8752,8772,8792,8811,8815,8827,8832,8836,8866,8870,8875,8889,8898,8902,8925,8945,8973,8988,8992,9009,9015,9028,9038,9042,9046,9051,9074,9084,9088,9098,9103,9114,9138,9171,9175,9180,9193,9198,9202,9207,9245,9256,9260,9279,9283,9287,9294,9298,9303,9312,9321,9325,9331,9340,9349,9353,9374,9378,9397,9411,9432,9436,9451,9456,9467,9497,9505,9524,9563,9568,9584,9605,9609,9613,9639,9643,9650,9654,9660,9669,9678,9682,9701,9717,9727,9735,9754,9797,9801,9823,9832,9848,9867,9871,9884,9899,9923,9927,9934,9938,9956,9969,10000,10004,10009,10022,10033,10037,10046,10056,10060,10065,10070,10074,10080,10089,10098,10102,10131,10147,10151,10182,10202,10211,10215,10224,10234,10245,10256,10261,10266,10281,10297,10302,10308,10334,10353,10387,10392,10398,10408,10418,10423,10430,10440,10450,10455,10461,10471,10484,10505,10526,10547,10568,10589,10610,10624,10642,10659,10679,10698,10704,10709,10715,10720,10728,10733,10740,10750,10760,10765,10775,10788,10808,10822,10828,10844,10861,10867,10873,10887,10893,10899,10905,10913,10918,10924,10945,10966,10987,10992,10997,11002,11007],{"__ignoreMap":1045},[1050,7275,7276,7278,7280,7282,7284,7286,7288,7290,7293,7295,7298,7300,7303,7305,7308,7310,7313,7315,7318,7320,7323,7325],{"class":1052,"line":1053},[1050,7277,1307],{"class":1306},[1050,7279,1311],{"class":1310},[1050,7281,1314],{"class":1073},[1050,7283,3169],{"class":1310},[1050,7285,1314],{"class":1073},[1050,7287,3174],{"class":1310},[1050,7289,1320],{"class":1306},[1050,7291,7292],{"class":1310}," Q",[1050,7294,1454],{"class":1073},[1050,7296,7297],{"class":1310}," F",[1050,7299,1454],{"class":1073},[1050,7301,7302],{"class":1310}," Case",[1050,7304,1454],{"class":1073},[1050,7306,7307],{"class":1310}," When",[1050,7309,1454],{"class":1073},[1050,7311,7312],{"class":1310}," Value",[1050,7314,1454],{"class":1073},[1050,7316,7317],{"class":1310}," Exists",[1050,7319,1454],{"class":1073},[1050,7321,7322],{"class":1310}," OuterRef",[1050,7324,1454],{"class":1073},[1050,7326,7327],{"class":1310}," Subquery\n",[1050,7329,7330],{"class":1052,"line":1060},[1050,7331,1294],{"emptyLinePlaceholder":1293},[1050,7333,7334,7336,7339],{"class":1052,"line":1066},[1050,7335,1157],{"class":1359},[1050,7337,7338],{"class":1362}," AdvancedQueryOptimization",[1050,7340,1366],{"class":1073},[1050,7342,7343,7345,7348],{"class":1052,"line":1080},[1050,7344,1373],{"class":1372},[1050,7346,7347],{"class":1376},"Advanced query optimization techniques",[1050,7349,1380],{"class":1372},[1050,7351,7352],{"class":1052,"line":1104},[1050,7353,1386],{"class":1310},[1050,7355,7356,7358],{"class":1052,"line":1122},[1050,7357,1392],{"class":1073},[1050,7359,1396],{"class":1395},[1050,7361,7362,7364,7367],{"class":1052,"line":1136},[1050,7363,1402],{"class":1359},[1050,7365,7366],{"class":1405}," optimize_exists_queries",[1050,7368,2262],{"class":1073},[1050,7370,7371,7373,7376],{"class":1052,"line":1151},[1050,7372,1422],{"class":1372},[1050,7374,7375],{"class":1376},"Use EXISTS instead of IN for better performance",[1050,7377,1380],{"class":1372},[1050,7379,7380],{"class":1052,"line":1174},[1050,7381,1433],{"class":1310},[1050,7383,7384],{"class":1052,"line":1180},[1050,7385,7386],{"class":1056},"        # Bad: Using IN with subquery (can be slow for large datasets)\n",[1050,7388,7389,7392,7394,7397,7399,7401,7403,7405],{"class":1052,"line":1186},[1050,7390,7391],{"class":1310},"        popular_categories ",[1050,7393,1504],{"class":1073},[1050,7395,7396],{"class":1310}," Category",[1050,7398,1314],{"class":1073},[1050,7400,2660],{"class":1479},[1050,7402,1314],{"class":1073},[1050,7404,2696],{"class":1485},[1050,7406,3472],{"class":1073},[1050,7408,7409,7412,7414,7416,7418,7420,7422,7424,7426,7429,7431,7434,7436,7439,7441,7443,7446,7448],{"class":1052,"line":1200},[1050,7410,7411],{"class":2669},"            id__in",[1050,7413,1504],{"class":1073},[1050,7415,4077],{"class":1485},[1050,7417,1314],{"class":1073},[1050,7419,2660],{"class":1479},[1050,7421,1314],{"class":1073},[1050,7423,2696],{"class":1485},[1050,7425,1409],{"class":1073},[1050,7427,7428],{"class":2669},"view_count__gt",[1050,7430,1504],{"class":1073},[1050,7432,7433],{"class":1097},"1000",[1050,7435,3357],{"class":1073},[1050,7437,7438],{"class":1485},"values",[1050,7440,1409],{"class":1073},[1050,7442,1091],{"class":1083},[1050,7444,7445],{"class":1087},"category_id",[1050,7447,1091],{"class":1083},[1050,7449,1540],{"class":1073},[1050,7451,7452],{"class":1052,"line":1214},[1050,7453,7454],{"class":1073},"        )\n",[1050,7456,7457],{"class":1052,"line":1237},[1050,7458,1433],{"class":1310},[1050,7460,7461],{"class":1052,"line":1258},[1050,7462,7463],{"class":1056},"        # Good: Using EXISTS (often faster)\n",[1050,7465,7466,7468,7470,7472,7474,7476,7478,7480],{"class":1052,"line":1274},[1050,7467,7391],{"class":1310},[1050,7469,1504],{"class":1073},[1050,7471,7396],{"class":1310},[1050,7473,1314],{"class":1073},[1050,7475,2660],{"class":1479},[1050,7477,1314],{"class":1073},[1050,7479,2696],{"class":1485},[1050,7481,3472],{"class":1073},[1050,7483,7484,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505,7508,7510,7512,7515,7517,7520,7523,7525,7527],{"class":1052,"line":1279},[1050,7485,7486],{"class":1485},"            Exists",[1050,7488,1409],{"class":1073},[1050,7490,4077],{"class":1485},[1050,7492,1314],{"class":1073},[1050,7494,2660],{"class":1479},[1050,7496,1314],{"class":1073},[1050,7498,2696],{"class":1485},[1050,7500,1409],{"class":1073},[1050,7502,2817],{"class":2669},[1050,7504,1504],{"class":1073},[1050,7506,7507],{"class":1485},"OuterRef",[1050,7509,1409],{"class":1073},[1050,7511,1091],{"class":1083},[1050,7513,7514],{"class":1087},"pk",[1050,7516,1091],{"class":1083},[1050,7518,7519],{"class":1073},"),",[1050,7521,7522],{"class":2669}," view_count__gt",[1050,7524,1504],{"class":1073},[1050,7526,7433],{"class":1097},[1050,7528,7529],{"class":1073},"))\n",[1050,7531,7532],{"class":1052,"line":1284},[1050,7533,7454],{"class":1073},[1050,7535,7536],{"class":1052,"line":1290},[1050,7537,1433],{"class":1310},[1050,7539,7540,7542],{"class":1052,"line":1297},[1050,7541,2327],{"class":1306},[1050,7543,7544],{"class":1310}," popular_categories\n",[1050,7546,7547],{"class":1052,"line":1303},[1050,7548,1386],{"class":1310},[1050,7550,7551,7553],{"class":1052,"line":1326},[1050,7552,1392],{"class":1073},[1050,7554,1396],{"class":1395},[1050,7556,7557,7559,7562],{"class":1052,"line":1343},[1050,7558,1402],{"class":1359},[1050,7560,7561],{"class":1405}," optimize_count_queries",[1050,7563,2262],{"class":1073},[1050,7565,7566,7568,7571],{"class":1052,"line":1351},[1050,7567,1422],{"class":1372},[1050,7569,7570],{"class":1376},"Optimize counting queries",[1050,7572,1380],{"class":1372},[1050,7574,7575],{"class":1052,"line":1356},[1050,7576,1433],{"class":1310},[1050,7578,7579],{"class":1052,"line":1369},[1050,7580,7581],{"class":1056},"        # Bad: count() on large tables\n",[1050,7583,7584,7587,7589,7591,7593,7595,7597,7599,7601],{"class":1052,"line":1383},[1050,7585,7586],{"class":1310},"        total_posts ",[1050,7588,1504],{"class":1073},[1050,7590,2687],{"class":1310},[1050,7592,1314],{"class":1073},[1050,7594,2660],{"class":1479},[1050,7596,1314],{"class":1073},[1050,7598,2279],{"class":1485},[1050,7600,2200],{"class":1073},[1050,7602,7603],{"class":1056},"  # Can be slow on large tables\n",[1050,7605,7606],{"class":1052,"line":1389},[1050,7607,1433],{"class":1310},[1050,7609,7610],{"class":1052,"line":1399},[1050,7611,7612],{"class":1056},"        # Good: Use aggregation or estimation for large datasets\n",[1050,7614,7615,7618,7620,7622,7624,7626,7628,7630],{"class":1052,"line":1419},[1050,7616,7617],{"class":1306},"        from",[1050,7619,1311],{"class":1310},[1050,7621,1314],{"class":1073},[1050,7623,3169],{"class":1310},[1050,7625,1314],{"class":1073},[1050,7627,3174],{"class":1310},[1050,7629,1320],{"class":1306},[1050,7631,3184],{"class":1310},[1050,7633,7634],{"class":1052,"line":1430},[1050,7635,1433],{"class":1310},[1050,7637,7638],{"class":1052,"line":1436},[1050,7639,7640],{"class":1056},"        # For approximate counts (PostgreSQL)\n",[1050,7642,7643,7645,7647,7649,7651,7653,7655,7657],{"class":1052,"line":1465},[1050,7644,5717],{"class":1306},[1050,7646,1636],{"class":1310},[1050,7648,1314],{"class":1073},[1050,7650,2410],{"class":1485},[1050,7652,2200],{"class":1073},[1050,7654,2415],{"class":1306},[1050,7656,2418],{"class":1310},[1050,7658,1366],{"class":1073},[1050,7660,7661,7663,7665,7667,7669],{"class":1052,"line":1471},[1050,7662,5736],{"class":1310},[1050,7664,1314],{"class":1073},[1050,7666,2431],{"class":1485},[1050,7668,1409],{"class":1073},[1050,7670,1380],{"class":1083},[1050,7672,7673],{"class":1052,"line":1492},[1050,7674,7675],{"class":1087},"                SELECT reltuples::BIGINT AS estimate\n",[1050,7677,7678],{"class":1052,"line":1498},[1050,7679,7680],{"class":1087},"                FROM pg_class\n",[1050,7682,7683],{"class":1052,"line":1517},[1050,7684,7685],{"class":1087},"                WHERE relname = 'blog_post'\n",[1050,7687,7688,7690],{"class":1052,"line":1543},[1050,7689,4370],{"class":1083},[1050,7691,1540],{"class":1073},[1050,7693,7694,7697,7699,7701,7703,7706,7708,7710],{"class":1052,"line":1559},[1050,7695,7696],{"class":1310},"            approximate_count ",[1050,7698,1504],{"class":1073},[1050,7700,2418],{"class":1310},[1050,7702,1314],{"class":1073},[1050,7704,7705],{"class":1485},"fetchone",[1050,7707,6124],{"class":1073},[1050,7709,2075],{"class":1097},[1050,7711,1834],{"class":1073},[1050,7713,7714],{"class":1052,"line":1564},[1050,7715,1433],{"class":1310},[1050,7717,7718],{"class":1052,"line":1570},[1050,7719,7720],{"class":1056},"        # For conditional counts, use aggregation\n",[1050,7722,7723,7726,7728,7730,7732,7734,7736,7738],{"class":1052,"line":1594},[1050,7724,7725],{"class":1310},"        category_stats ",[1050,7727,1504],{"class":1073},[1050,7729,7396],{"class":1310},[1050,7731,1314],{"class":1073},[1050,7733,2660],{"class":1479},[1050,7735,1314],{"class":1073},[1050,7737,4692],{"class":1485},[1050,7739,3472],{"class":1073},[1050,7741,7742,7745,7747,7749,7751,7753,7755,7757],{"class":1052,"line":1645},[1050,7743,7744],{"class":2669},"            post_count",[1050,7746,1504],{"class":1073},[1050,7748,4704],{"class":1485},[1050,7750,1409],{"class":1073},[1050,7752,1091],{"class":1083},[1050,7754,4064],{"class":1087},[1050,7756,1091],{"class":1083},[1050,7758,4715],{"class":1073},[1050,7760,7761,7764,7766,7768,7770,7772,7774,7776,7778,7781,7783,7785,7787,7790,7792,7794,7796,7798],{"class":1052,"line":1650},[1050,7762,7763],{"class":2669},"            published_count",[1050,7765,1504],{"class":1073},[1050,7767,4704],{"class":1485},[1050,7769,1409],{"class":1073},[1050,7771,1091],{"class":1083},[1050,7773,4064],{"class":1087},[1050,7775,1091],{"class":1083},[1050,7777,1454],{"class":1073},[1050,7779,7780],{"class":2669}," filter",[1050,7782,1504],{"class":1073},[1050,7784,5523],{"class":1485},[1050,7786,1409],{"class":1073},[1050,7788,7789],{"class":2669},"posts__status",[1050,7791,1504],{"class":1073},[1050,7793,1091],{"class":1083},[1050,7795,5534],{"class":1087},[1050,7797,1091],{"class":1083},[1050,7799,7529],{"class":1073},[1050,7801,7802],{"class":1052,"line":1690},[1050,7803,7454],{"class":1073},[1050,7805,7806],{"class":1052,"line":1713},[1050,7807,1433],{"class":1310},[1050,7809,7810,7812],{"class":1052,"line":1740},[1050,7811,2327],{"class":1306},[1050,7813,7814],{"class":1310}," category_stats\n",[1050,7816,7817],{"class":1052,"line":1771},[1050,7818,1386],{"class":1310},[1050,7820,7821,7823],{"class":1052,"line":1776},[1050,7822,1392],{"class":1073},[1050,7824,1396],{"class":1395},[1050,7826,7827,7829,7832],{"class":1052,"line":1782},[1050,7828,1402],{"class":1359},[1050,7830,7831],{"class":1405}," optimize_pagination",[1050,7833,2262],{"class":1073},[1050,7835,7836,7838,7841],{"class":1052,"line":1837},[1050,7837,1422],{"class":1372},[1050,7839,7840],{"class":1376},"Optimize pagination for large datasets",[1050,7842,1380],{"class":1372},[1050,7844,7845],{"class":1052,"line":1848},[1050,7846,1433],{"class":1310},[1050,7848,7849],{"class":1052,"line":1885},[1050,7850,7851],{"class":1056},"        # Bad: OFFSET pagination (slow for large offsets)\n",[1050,7853,7854,7856,7859,7861,7864,7866,7869,7871,7873],{"class":1052,"line":1914},[1050,7855,1439],{"class":1359},[1050,7857,7858],{"class":1405}," bad_pagination",[1050,7860,1409],{"class":1073},[1050,7862,7863],{"class":1412},"page",[1050,7865,1454],{"class":1073},[1050,7867,7868],{"class":1412}," per_page",[1050,7870,1504],{"class":1447},[1050,7872,5081],{"class":1097},[1050,7874,1416],{"class":1073},[1050,7876,7877,7880,7882,7884,7887,7889,7891,7893,7896],{"class":1052,"line":1958},[1050,7878,7879],{"class":1310},"            offset ",[1050,7881,1504],{"class":1073},[1050,7883,6997],{"class":1073},[1050,7885,7886],{"class":1310},"page ",[1050,7888,1757],{"class":1447},[1050,7890,1098],{"class":1097},[1050,7892,1875],{"class":1073},[1050,7894,7895],{"class":1447}," *",[1050,7897,7898],{"class":1310}," per_page\n",[1050,7900,7901,7903,7905,7907,7909,7911,7913,7915,7918,7920,7923,7926,7928],{"class":1052,"line":1998},[1050,7902,2313],{"class":1306},[1050,7904,2687],{"class":1310},[1050,7906,1314],{"class":1073},[1050,7908,2660],{"class":1479},[1050,7910,1314],{"class":1073},[1050,7912,3261],{"class":1485},[1050,7914,6124],{"class":1073},[1050,7916,7917],{"class":1310},"offset",[1050,7919,1094],{"class":1073},[1050,7921,7922],{"class":1310},"offset ",[1050,7924,7925],{"class":1447},"+",[1050,7927,7868],{"class":1310},[1050,7929,1834],{"class":1073},[1050,7931,7932],{"class":1052,"line":2003},[1050,7933,1433],{"class":1310},[1050,7935,7936],{"class":1052,"line":2009},[1050,7937,7938],{"class":1056},"        # Good: Cursor-based pagination\n",[1050,7940,7941,7943,7946,7948,7951,7953,7956,7958,7960,7962,7964],{"class":1052,"line":2020},[1050,7942,1439],{"class":1359},[1050,7944,7945],{"class":1405}," cursor_pagination",[1050,7947,1409],{"class":1073},[1050,7949,7950],{"class":1412},"cursor_id",[1050,7952,1504],{"class":1447},[1050,7954,7955],{"class":1116},"None",[1050,7957,1454],{"class":1073},[1050,7959,7868],{"class":1412},[1050,7961,1504],{"class":1447},[1050,7963,5081],{"class":1097},[1050,7965,1416],{"class":1073},[1050,7967,7968,7971,7973,7975,7977,7979,7981,7983,7985,7987,7990,7992],{"class":1052,"line":2038},[1050,7969,7970],{"class":1310},"            queryset ",[1050,7972,1504],{"class":1073},[1050,7974,2687],{"class":1310},[1050,7976,1314],{"class":1073},[1050,7978,2660],{"class":1479},[1050,7980,1314],{"class":1073},[1050,7982,3932],{"class":1485},[1050,7984,1409],{"class":1073},[1050,7986,1091],{"class":1083},[1050,7988,7989],{"class":1087},"-id",[1050,7991,1091],{"class":1083},[1050,7993,1540],{"class":1073},[1050,7995,7996],{"class":1052,"line":2118},[1050,7997,1495],{"class":1310},[1050,7999,8000,8002,8005],{"class":1052,"line":2158},[1050,8001,1840],{"class":1306},[1050,8003,8004],{"class":1310}," cursor_id",[1050,8006,1366],{"class":1073},[1050,8008,8009,8012,8014,8017,8019,8021,8023,8026,8028,8030],{"class":1052,"line":2163},[1050,8010,8011],{"class":1310},"                queryset ",[1050,8013,1504],{"class":1073},[1050,8015,8016],{"class":1310}," queryset",[1050,8018,1314],{"class":1073},[1050,8020,2696],{"class":1485},[1050,8022,1409],{"class":1073},[1050,8024,8025],{"class":2669},"id__lt",[1050,8027,1504],{"class":1073},[1050,8029,7950],{"class":1485},[1050,8031,1540],{"class":1073},[1050,8033,8034],{"class":1052,"line":2215},[1050,8035,1495],{"class":1310},[1050,8037,8038,8041,8043,8045,8047,8049,8051,8054,8056,8058],{"class":1052,"line":2225},[1050,8039,8040],{"class":1310},"            posts ",[1050,8042,1504],{"class":1073},[1050,8044,3712],{"class":1395},[1050,8046,1409],{"class":1073},[1050,8048,2355],{"class":1485},[1050,8050,2291],{"class":1073},[1050,8052,8053],{"class":1485},"per_page ",[1050,8055,7925],{"class":1447},[1050,8057,1098],{"class":1097},[1050,8059,8060],{"class":1073},"])\n",[1050,8062,8063],{"class":1052,"line":2243},[1050,8064,1495],{"class":1310},[1050,8066,8067,8070,8072,8074,8076,8078,8080,8082],{"class":1052,"line":2265},[1050,8068,8069],{"class":1310},"            has_next ",[1050,8071,1504],{"class":1073},[1050,8073,1579],{"class":1578},[1050,8075,1409],{"class":1073},[1050,8077,4064],{"class":1485},[1050,8079,1875],{"class":1073},[1050,8081,1828],{"class":1447},[1050,8083,7898],{"class":1310},[1050,8085,8086,8088,8091],{"class":1052,"line":2305},[1050,8087,1840],{"class":1306},[1050,8089,8090],{"class":1310}," has_next",[1050,8092,1366],{"class":1073},[1050,8094,8095,8098,8100,8102,8104,8106,8109],{"class":1052,"line":2310},[1050,8096,8097],{"class":1310},"                posts ",[1050,8099,1504],{"class":1073},[1050,8101,2744],{"class":1310},[1050,8103,2291],{"class":1073},[1050,8105,1757],{"class":1447},[1050,8107,8108],{"class":1097},"1",[1050,8110,1834],{"class":1073},[1050,8112,8113],{"class":1052,"line":2319},[1050,8114,1495],{"class":1310},[1050,8116,8117,8120,8122,8124,8126,8128,8130,8132,8134,8136,8139,8142,8145,8148],{"class":1052,"line":2324},[1050,8118,8119],{"class":1310},"            next_cursor ",[1050,8121,1504],{"class":1073},[1050,8123,2744],{"class":1310},[1050,8125,1615],{"class":1073},[1050,8127,1757],{"class":1447},[1050,8129,8108],{"class":1097},[1050,8131,2057],{"class":1073},[1050,8133,2670],{"class":1479},[1050,8135,1808],{"class":1306},[1050,8137,8138],{"class":1310}," posts ",[1050,8140,8141],{"class":1447},"and",[1050,8143,8144],{"class":1310}," has_next ",[1050,8146,8147],{"class":1306},"else",[1050,8149,8150],{"class":1116}," None\n",[1050,8152,8153],{"class":1052,"line":2333},[1050,8154,1495],{"class":1310},[1050,8156,8157,8159],{"class":1052,"line":2338},[1050,8158,2313],{"class":1306},[1050,8160,1077],{"class":1073},[1050,8162,8163,8165,8167,8169,8171,8173],{"class":1052,"line":2345},[1050,8164,3872],{"class":1083},[1050,8166,4064],{"class":1087},[1050,8168,1091],{"class":1083},[1050,8170,1094],{"class":1073},[1050,8172,2744],{"class":1310},[1050,8174,1101],{"class":1073},[1050,8176,8177,8179,8182,8184,8186,8189],{"class":1052,"line":2360},[1050,8178,3872],{"class":1083},[1050,8180,8181],{"class":1087},"next_cursor",[1050,8183,1091],{"class":1083},[1050,8185,1094],{"class":1073},[1050,8187,8188],{"class":1310}," next_cursor",[1050,8190,1101],{"class":1073},[1050,8192,8193,8195,8198,8200,8202],{"class":1052,"line":2370},[1050,8194,3872],{"class":1083},[1050,8196,8197],{"class":1087},"has_next",[1050,8199,1091],{"class":1083},[1050,8201,1094],{"class":1073},[1050,8203,8204],{"class":1310}," has_next\n",[1050,8206,8207],{"class":1052,"line":2375},[1050,8208,8209],{"class":1073},"            }\n",[1050,8211,8212],{"class":1052,"line":2400},[1050,8213,1386],{"class":1310},[1050,8215,8216,8218],{"class":1052,"line":2423},[1050,8217,1392],{"class":1073},[1050,8219,1396],{"class":1395},[1050,8221,8222,8224,8227],{"class":1052,"line":2455},[1050,8223,1402],{"class":1359},[1050,8225,8226],{"class":1405}," optimize_complex_filters",[1050,8228,2262],{"class":1073},[1050,8230,8231,8233,8236],{"class":1052,"line":2470},[1050,8232,1422],{"class":1372},[1050,8234,8235],{"class":1376},"Optimize complex filtering operations",[1050,8237,1380],{"class":1372},[1050,8239,8240],{"class":1052,"line":2475},[1050,8241,1433],{"class":1310},[1050,8243,8244],{"class":1052,"line":2498},[1050,8245,8246],{"class":1056},"        # Use database functions instead of Python processing\n",[1050,8248,8249,8251,8253,8255,8257,8259,8261,8263,8266,8268,8271,8273],{"class":1052,"line":2517},[1050,8250,7617],{"class":1306},[1050,8252,1311],{"class":1310},[1050,8254,1314],{"class":1073},[1050,8256,3169],{"class":1310},[1050,8258,1314],{"class":1073},[1050,8260,4880],{"class":1310},[1050,8262,1314],{"class":1073},[1050,8264,8265],{"class":1310},"functions ",[1050,8267,1320],{"class":1306},[1050,8269,8270],{"class":1310}," Extract",[1050,8272,1454],{"class":1073},[1050,8274,8275],{"class":1310}," TruncDate\n",[1050,8277,8278],{"class":1052,"line":2547},[1050,8279,1433],{"class":1310},[1050,8281,8282],{"class":1052,"line":2560},[1050,8283,8284],{"class":1056},"        # Bad: Filter in Python\n",[1050,8286,8287,8289,8292],{"class":1052,"line":2565},[1050,8288,1439],{"class":1359},[1050,8290,8291],{"class":1405}," bad_date_filtering",[1050,8293,2262],{"class":1073},[1050,8295,8296,8298,8300,8302,8304,8306,8308,8310],{"class":1052,"line":2573},[1050,8297,8040],{"class":1310},[1050,8299,1504],{"class":1073},[1050,8301,2687],{"class":1310},[1050,8303,1314],{"class":1073},[1050,8305,2660],{"class":1479},[1050,8307,1314],{"class":1073},[1050,8309,3261],{"class":1485},[1050,8311,1489],{"class":1073},[1050,8313,8314,8317,8319,8321,8324,8326,8329,8331,8333,8336,8339,8341,8343,8345,8348,8350,8353],{"class":1052,"line":2591},[1050,8315,8316],{"class":1310},"            recent_posts ",[1050,8318,1504],{"class":1073},[1050,8320,1225],{"class":1073},[1050,8322,8323],{"class":1310},"p ",[1050,8325,1795],{"class":1306},[1050,8327,8328],{"class":1310}," p ",[1050,8330,1633],{"class":1306},[1050,8332,8138],{"class":1310},[1050,8334,8335],{"class":1306},"if",[1050,8337,8338],{"class":1310}," p",[1050,8340,1314],{"class":1073},[1050,8342,5336],{"class":1479},[1050,8344,1314],{"class":1073},[1050,8346,8347],{"class":1479},"year",[1050,8349,2388],{"class":1447},[1050,8351,8352],{"class":1097}," 2023",[1050,8354,1834],{"class":1073},[1050,8356,8357,8359],{"class":1052,"line":2596},[1050,8358,2313],{"class":1306},[1050,8360,8361],{"class":1310}," recent_posts\n",[1050,8363,8364],{"class":1052,"line":2602},[1050,8365,1433],{"class":1310},[1050,8367,8368],{"class":1052,"line":2616},[1050,8369,8370],{"class":1056},"        # Good: Filter in database\n",[1050,8372,8373,8375,8378],{"class":1052,"line":2632},[1050,8374,1439],{"class":1359},[1050,8376,8377],{"class":1405}," good_date_filtering",[1050,8379,2262],{"class":1073},[1050,8381,8382,8384,8386,8388,8390,8392,8394,8396,8399,8401,8404],{"class":1052,"line":2642},[1050,8383,2313],{"class":1306},[1050,8385,2687],{"class":1310},[1050,8387,1314],{"class":1073},[1050,8389,2660],{"class":1479},[1050,8391,1314],{"class":1073},[1050,8393,2696],{"class":1485},[1050,8395,1409],{"class":1073},[1050,8397,8398],{"class":2669},"created_at__year",[1050,8400,1504],{"class":1073},[1050,8402,8403],{"class":1097},"2023",[1050,8405,1540],{"class":1073},[1050,8407,8408],{"class":1052,"line":2647},[1050,8409,1433],{"class":1310},[1050,8411,8412],{"class":1052,"line":2679},[1050,8413,8414],{"class":1056},"        # Use annotations for complex calculations\n",[1050,8416,8417,8420,8422,8424,8426,8428,8430,8432],{"class":1052,"line":2711},[1050,8418,8419],{"class":1310},"        posts_with_metrics ",[1050,8421,1504],{"class":1073},[1050,8423,2687],{"class":1310},[1050,8425,1314],{"class":1073},[1050,8427,2660],{"class":1479},[1050,8429,1314],{"class":1073},[1050,8431,4692],{"class":1485},[1050,8433,3472],{"class":1073},[1050,8435,8436],{"class":1052,"line":2716},[1050,8437,8438],{"class":1056},"            # Calculate engagement score in database\n",[1050,8440,8441,8444,8446,8449,8451,8453,8455,8457,8459,8461,8463,8465,8467,8469,8471,8473,8475,8478],{"class":1052,"line":2722},[1050,8442,8443],{"class":2669},"            engagement_score",[1050,8445,1504],{"class":1073},[1050,8447,8448],{"class":1485},"F",[1050,8450,1409],{"class":1073},[1050,8452,1091],{"class":1083},[1050,8454,5455],{"class":1087},[1050,8456,1091],{"class":1083},[1050,8458,1875],{"class":1073},[1050,8460,2152],{"class":1447},[1050,8462,7297],{"class":1485},[1050,8464,1409],{"class":1073},[1050,8466,1091],{"class":1083},[1050,8468,4823],{"class":1087},[1050,8470,1091],{"class":1083},[1050,8472,1875],{"class":1073},[1050,8474,7895],{"class":1447},[1050,8476,8477],{"class":1097}," 2",[1050,8479,1101],{"class":1073},[1050,8481,8482],{"class":1052,"line":2733},[1050,8483,1495],{"class":1485},[1050,8485,8486],{"class":1052,"line":2749},[1050,8487,8488],{"class":1056},"            # Extract date parts\n",[1050,8490,8491,8494,8496,8499,8501,8503,8505,8507,8509,8511,8513,8515],{"class":1052,"line":2763},[1050,8492,8493],{"class":2669},"            created_year",[1050,8495,1504],{"class":1073},[1050,8497,8498],{"class":1485},"Extract",[1050,8500,1409],{"class":1073},[1050,8502,1091],{"class":1083},[1050,8504,5336],{"class":1087},[1050,8506,1091],{"class":1083},[1050,8508,1454],{"class":1073},[1050,8510,1164],{"class":1083},[1050,8512,8347],{"class":1087},[1050,8514,1091],{"class":1083},[1050,8516,4715],{"class":1073},[1050,8518,8519,8522,8524,8526,8528,8530,8532,8534,8536,8538,8541,8543],{"class":1052,"line":2784},[1050,8520,8521],{"class":2669},"            created_month",[1050,8523,1504],{"class":1073},[1050,8525,8498],{"class":1485},[1050,8527,1409],{"class":1073},[1050,8529,1091],{"class":1083},[1050,8531,5336],{"class":1087},[1050,8533,1091],{"class":1083},[1050,8535,1454],{"class":1073},[1050,8537,1164],{"class":1083},[1050,8539,8540],{"class":1087},"month",[1050,8542,1091],{"class":1083},[1050,8544,4715],{"class":1073},[1050,8546,8547],{"class":1052,"line":2812},[1050,8548,1495],{"class":1485},[1050,8550,8551],{"class":1052,"line":2840},[1050,8552,8553],{"class":1056},"            # Conditional values\n",[1050,8555,8556,8559,8561,8564],{"class":1052,"line":2867},[1050,8557,8558],{"class":2669},"            popularity_tier",[1050,8560,1504],{"class":1073},[1050,8562,8563],{"class":1485},"Case",[1050,8565,3472],{"class":1073},[1050,8567,8568,8571,8573,8576,8578,8581,8583,8586,8588,8591,8593,8595,8598,8600],{"class":1052,"line":2873},[1050,8569,8570],{"class":1485},"                When",[1050,8572,1409],{"class":1073},[1050,8574,8575],{"class":2669},"view_count__gte",[1050,8577,1504],{"class":1073},[1050,8579,8580],{"class":1097},"10000",[1050,8582,1454],{"class":1073},[1050,8584,8585],{"class":2669}," then",[1050,8587,1504],{"class":1073},[1050,8589,8590],{"class":1485},"Value",[1050,8592,1409],{"class":1073},[1050,8594,1091],{"class":1083},[1050,8596,8597],{"class":1087},"high",[1050,8599,1091],{"class":1083},[1050,8601,8602],{"class":1073},")),\n",[1050,8604,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8630,8632],{"class":1052,"line":2878},[1050,8606,8570],{"class":1485},[1050,8608,1409],{"class":1073},[1050,8610,8575],{"class":2669},[1050,8612,1504],{"class":1073},[1050,8614,7433],{"class":1097},[1050,8616,1454],{"class":1073},[1050,8618,8585],{"class":2669},[1050,8620,1504],{"class":1073},[1050,8622,8590],{"class":1485},[1050,8624,1409],{"class":1073},[1050,8626,1091],{"class":1083},[1050,8628,8629],{"class":1087},"medium",[1050,8631,1091],{"class":1083},[1050,8633,8602],{"class":1073},[1050,8635,8636,8639,8641,8643,8645,8647,8650,8652],{"class":1052,"line":2886},[1050,8637,8638],{"class":2669},"                default",[1050,8640,1504],{"class":1073},[1050,8642,8590],{"class":1485},[1050,8644,1409],{"class":1073},[1050,8646,1091],{"class":1083},[1050,8648,8649],{"class":1087},"low",[1050,8651,1091],{"class":1083},[1050,8653,1540],{"class":1073},[1050,8655,8656],{"class":1052,"line":2891},[1050,8657,3948],{"class":1073},[1050,8659,8660,8662,8664,8666,8669,8671,8673],{"class":1052,"line":2902},[1050,8661,3518],{"class":1073},[1050,8663,2696],{"class":1485},[1050,8665,1409],{"class":1073},[1050,8667,8668],{"class":2669},"engagement_score__gte",[1050,8670,1504],{"class":1073},[1050,8672,1986],{"class":1097},[1050,8674,1540],{"class":1073},[1050,8676,8677],{"class":1052,"line":2916},[1050,8678,1433],{"class":1310},[1050,8680,8681,8683],{"class":1052,"line":2926},[1050,8682,2327],{"class":1306},[1050,8684,8685],{"class":1310}," posts_with_metrics\n",[1050,8687,8688],{"class":1052,"line":2931},[1050,8689,1386],{"class":1310},[1050,8691,8692,8694],{"class":1052,"line":2962},[1050,8693,1392],{"class":1073},[1050,8695,1396],{"class":1395},[1050,8697,8698,8700,8703],{"class":1052,"line":2991},[1050,8699,1402],{"class":1359},[1050,8701,8702],{"class":1405}," optimize_bulk_operations",[1050,8704,2262],{"class":1073},[1050,8706,8707,8709,8712],{"class":1052,"line":3009},[1050,8708,1422],{"class":1372},[1050,8710,8711],{"class":1376},"Optimize bulk create, update, and delete operations",[1050,8713,1380],{"class":1372},[1050,8715,8716],{"class":1052,"line":3014},[1050,8717,1433],{"class":1310},[1050,8719,8720],{"class":1052,"line":3023},[1050,8721,8722],{"class":1056},"        # Bulk create\n",[1050,8724,8725,8727,8730,8732,8735],{"class":1052,"line":3036},[1050,8726,1439],{"class":1359},[1050,8728,8729],{"class":1405}," bulk_create_posts",[1050,8731,1409],{"class":1073},[1050,8733,8734],{"class":1412},"posts_data",[1050,8736,1416],{"class":1073},[1050,8738,8739,8741,8743],{"class":1052,"line":3047},[1050,8740,8040],{"class":1310},[1050,8742,1504],{"class":1073},[1050,8744,5258],{"class":1073},[1050,8746,8747,8750],{"class":1052,"line":3066},[1050,8748,8749],{"class":1485},"                Post",[1050,8751,3472],{"class":1073},[1050,8753,8754,8757,8759,8762,8764,8766,8768,8770],{"class":1052,"line":3089},[1050,8755,8756],{"class":2669},"                    title",[1050,8758,1504],{"class":1073},[1050,8760,8761],{"class":1485},"data",[1050,8763,1615],{"class":1073},[1050,8765,1091],{"class":1083},[1050,8767,2768],{"class":1087},[1050,8769,1091],{"class":1083},[1050,8771,1234],{"class":1073},[1050,8773,8774,8777,8779,8781,8783,8785,8788,8790],{"class":1052,"line":3112},[1050,8775,8776],{"class":2669},"                    content",[1050,8778,1504],{"class":1073},[1050,8780,8761],{"class":1485},[1050,8782,1615],{"class":1073},[1050,8784,1091],{"class":1083},[1050,8786,8787],{"class":1087},"content",[1050,8789,1091],{"class":1083},[1050,8791,1234],{"class":1073},[1050,8793,8794,8797,8799,8801,8803,8805,8807,8809],{"class":1052,"line":3135},[1050,8795,8796],{"class":2669},"                    author_id",[1050,8798,1504],{"class":1073},[1050,8800,8761],{"class":1485},[1050,8802,1615],{"class":1073},[1050,8804,1091],{"class":1083},[1050,8806,2950],{"class":1087},[1050,8808,1091],{"class":1083},[1050,8810,1834],{"class":1073},[1050,8812,8813],{"class":1052,"line":3140},[1050,8814,4555],{"class":1073},[1050,8816,8817,8819,8822,8824],{"class":1052,"line":3145},[1050,8818,1888],{"class":1306},[1050,8820,8821],{"class":1310}," data ",[1050,8823,1633],{"class":1306},[1050,8825,8826],{"class":1310}," posts_data\n",[1050,8828,8829],{"class":1052,"line":4737},[1050,8830,8831],{"class":1073},"            ]\n",[1050,8833,8834],{"class":1052,"line":4762},[1050,8835,1495],{"class":1310},[1050,8837,8838,8840,8842,8844,8846,8848,8851,8853,8855,8857,8860,8862,8864],{"class":1052,"line":4767},[1050,8839,2313],{"class":1306},[1050,8841,2687],{"class":1310},[1050,8843,1314],{"class":1073},[1050,8845,2660],{"class":1479},[1050,8847,1314],{"class":1073},[1050,8849,8850],{"class":1485},"bulk_create",[1050,8852,1409],{"class":1073},[1050,8854,4064],{"class":1485},[1050,8856,1454],{"class":1073},[1050,8858,8859],{"class":2669}," batch_size",[1050,8861,1504],{"class":1073},[1050,8863,7433],{"class":1097},[1050,8865,1540],{"class":1073},[1050,8867,8868],{"class":1052,"line":4780},[1050,8869,1433],{"class":1310},[1050,8871,8872],{"class":1052,"line":6185},[1050,8873,8874],{"class":1056},"        # Bulk update\n",[1050,8876,8877,8879,8882,8884,8887],{"class":1052,"line":6195},[1050,8878,1439],{"class":1359},[1050,8880,8881],{"class":1405}," bulk_update_view_counts",[1050,8883,1409],{"class":1073},[1050,8885,8886],{"class":1412},"post_updates",[1050,8888,1416],{"class":1073},[1050,8890,8891,8894,8896],{"class":1052,"line":6205},[1050,8892,8893],{"class":1310},"            posts_to_update ",[1050,8895,1504],{"class":1073},[1050,8897,2730],{"class":1073},[1050,8899,8900],{"class":1052,"line":6210},[1050,8901,1495],{"class":1310},[1050,8903,8904,8906,8909,8911,8914,8916,8919,8921,8923],{"class":1052,"line":6216},[1050,8905,2023],{"class":1306},[1050,8907,8908],{"class":1310}," post_id",[1050,8910,1454],{"class":1073},[1050,8912,8913],{"class":1310}," increment ",[1050,8915,1633],{"class":1306},[1050,8917,8918],{"class":1310}," post_updates",[1050,8920,1314],{"class":1073},[1050,8922,2197],{"class":1485},[1050,8924,2262],{"class":1073},[1050,8926,8927,8930,8932,8934,8936,8938,8940,8943],{"class":1052,"line":6226},[1050,8928,8929],{"class":1310},"                post ",[1050,8931,1504],{"class":1073},[1050,8933,2687],{"class":1485},[1050,8935,1409],{"class":1073},[1050,8937,2670],{"class":2669},[1050,8939,1504],{"class":1073},[1050,8941,8942],{"class":1485},"post_id",[1050,8944,1540],{"class":1073},[1050,8946,8947,8950,8952,8954,8956,8958,8960,8962,8964,8966,8968,8970],{"class":1052,"line":6232},[1050,8948,8949],{"class":1310},"                post",[1050,8951,1314],{"class":1073},[1050,8953,5455],{"class":1479},[1050,8955,1074],{"class":1073},[1050,8957,7297],{"class":1485},[1050,8959,1409],{"class":1073},[1050,8961,1091],{"class":1083},[1050,8963,5455],{"class":1087},[1050,8965,1091],{"class":1083},[1050,8967,1875],{"class":1073},[1050,8969,2152],{"class":1447},[1050,8971,8972],{"class":1310}," increment\n",[1050,8974,8975,8978,8980,8982,8984,8986],{"class":1052,"line":6237},[1050,8976,8977],{"class":1310},"                posts_to_update",[1050,8979,1314],{"class":1073},[1050,8981,2757],{"class":1485},[1050,8983,1409],{"class":1073},[1050,8985,3291],{"class":1485},[1050,8987,1540],{"class":1073},[1050,8989,8990],{"class":1052,"line":6243},[1050,8991,1495],{"class":1310},[1050,8993,8994,8996,8998,9000,9002,9004,9007],{"class":1052,"line":6249},[1050,8995,2313],{"class":1306},[1050,8997,2687],{"class":1310},[1050,8999,1314],{"class":1073},[1050,9001,2660],{"class":1479},[1050,9003,1314],{"class":1073},[1050,9005,9006],{"class":1485},"bulk_update",[1050,9008,3472],{"class":1073},[1050,9010,9011,9013],{"class":1052,"line":6256},[1050,9012,8977],{"class":1485},[1050,9014,1101],{"class":1073},[1050,9016,9017,9020,9022,9024,9026],{"class":1052,"line":6261},[1050,9018,9019],{"class":1073},"                [",[1050,9021,1091],{"class":1083},[1050,9023,5455],{"class":1087},[1050,9025,1091],{"class":1083},[1050,9027,1234],{"class":1073},[1050,9029,9030,9033,9035],{"class":1052,"line":6267},[1050,9031,9032],{"class":2669},"                batch_size",[1050,9034,1504],{"class":1073},[1050,9036,9037],{"class":1097},"1000\n",[1050,9039,9040],{"class":1052,"line":6272},[1050,9041,3948],{"class":1073},[1050,9043,9044],{"class":1052,"line":6278},[1050,9045,1433],{"class":1310},[1050,9047,9048],{"class":1052,"line":6284},[1050,9049,9050],{"class":1056},"        # Efficient bulk delete with chunking\n",[1050,9052,9053,9055,9058,9060,9063,9065,9068,9070,9072],{"class":1052,"line":6290},[1050,9054,1439],{"class":1359},[1050,9056,9057],{"class":1405}," bulk_delete_old_posts",[1050,9059,1409],{"class":1073},[1050,9061,9062],{"class":1412},"cutoff_date",[1050,9064,1454],{"class":1073},[1050,9066,9067],{"class":1412}," chunk_size",[1050,9069,1504],{"class":1447},[1050,9071,7433],{"class":1097},[1050,9073,1416],{"class":1073},[1050,9075,9076,9079,9081],{"class":1052,"line":6297},[1050,9077,9078],{"class":1310},"            total_deleted ",[1050,9080,1504],{"class":1073},[1050,9082,9083],{"class":1097}," 0\n",[1050,9085,9086],{"class":1052,"line":6302},[1050,9087,1495],{"class":1310},[1050,9089,9090,9093,9096],{"class":1052,"line":6308},[1050,9091,9092],{"class":1306},"            while",[1050,9094,9095],{"class":1116}," True",[1050,9097,1366],{"class":1073},[1050,9099,9100],{"class":1052,"line":6313},[1050,9101,9102],{"class":1056},"                # Get IDs to delete in chunks\n",[1050,9104,9105,9108,9110,9112],{"class":1052,"line":6319},[1050,9106,9107],{"class":1310},"                ids_to_delete ",[1050,9109,1504],{"class":1073},[1050,9111,3712],{"class":1395},[1050,9113,3472],{"class":1073},[1050,9115,9116,9119,9121,9123,9125,9127,9129,9132,9134,9136],{"class":1052,"line":6325},[1050,9117,9118],{"class":1485},"                    Post",[1050,9120,1314],{"class":1073},[1050,9122,2660],{"class":1479},[1050,9124,1314],{"class":1073},[1050,9126,2696],{"class":1485},[1050,9128,1409],{"class":1073},[1050,9130,9131],{"class":2669},"created_at__lt",[1050,9133,1504],{"class":1073},[1050,9135,9062],{"class":1485},[1050,9137,1540],{"class":1073},[1050,9139,9140,9143,9146,9148,9150,9152,9154,9156,9159,9161,9163,9166,9169],{"class":1052,"line":6332},[1050,9141,9142],{"class":1073},"                               .",[1050,9144,9145],{"class":1485},"values_list",[1050,9147,1409],{"class":1073},[1050,9149,1091],{"class":1083},[1050,9151,2670],{"class":1087},[1050,9153,1091],{"class":1083},[1050,9155,1454],{"class":1073},[1050,9157,9158],{"class":2669}," flat",[1050,9160,1504],{"class":1073},[1050,9162,3906],{"class":1116},[1050,9164,9165],{"class":1073},")[:",[1050,9167,9168],{"class":1485},"chunk_size",[1050,9170,1834],{"class":1073},[1050,9172,9173],{"class":1052,"line":6337},[1050,9174,4555],{"class":1073},[1050,9176,9177],{"class":1052,"line":6342},[1050,9178,9179],{"class":1310},"                \n",[1050,9181,9182,9185,9188,9191],{"class":1052,"line":6361},[1050,9183,9184],{"class":1306},"                if",[1050,9186,9187],{"class":1447}," not",[1050,9189,9190],{"class":1310}," ids_to_delete",[1050,9192,1366],{"class":1073},[1050,9194,9195],{"class":1052,"line":6375},[1050,9196,9197],{"class":1306},"                    break\n",[1050,9199,9200],{"class":1052,"line":6382},[1050,9201,9179],{"class":1310},[1050,9203,9204],{"class":1052,"line":6397},[1050,9205,9206],{"class":1056},"                # Delete chunk\n",[1050,9208,9209,9212,9214,9216,9218,9220,9222,9224,9226,9229,9231,9234,9236,9239,9241,9243],{"class":1052,"line":6411},[1050,9210,9211],{"class":1310},"                deleted_count ",[1050,9213,1504],{"class":1073},[1050,9215,2687],{"class":1310},[1050,9217,1314],{"class":1073},[1050,9219,2660],{"class":1479},[1050,9221,1314],{"class":1073},[1050,9223,2696],{"class":1485},[1050,9225,1409],{"class":1073},[1050,9227,9228],{"class":2669},"id__in",[1050,9230,1504],{"class":1073},[1050,9232,9233],{"class":1485},"ids_to_delete",[1050,9235,3357],{"class":1073},[1050,9237,9238],{"class":1485},"delete",[1050,9240,6124],{"class":1073},[1050,9242,2075],{"class":1097},[1050,9244,1834],{"class":1073},[1050,9246,9247,9250,9253],{"class":1052,"line":6424},[1050,9248,9249],{"class":1310},"                total_deleted ",[1050,9251,9252],{"class":1073},"+=",[1050,9254,9255],{"class":1310}," deleted_count\n",[1050,9257,9258],{"class":1052,"line":6446},[1050,9259,9179],{"class":1310},[1050,9261,9262,9264,9266,9268,9270,9272,9275,9277],{"class":1052,"line":6451},[1050,9263,9184],{"class":1306},[1050,9265,1579],{"class":1578},[1050,9267,1409],{"class":1073},[1050,9269,9233],{"class":1485},[1050,9271,1875],{"class":1073},[1050,9273,9274],{"class":1447}," \u003C",[1050,9276,9067],{"class":1310},[1050,9278,1366],{"class":1073},[1050,9280,9281],{"class":1052,"line":6457},[1050,9282,9197],{"class":1306},[1050,9284,9285],{"class":1052,"line":6467},[1050,9286,1495],{"class":1310},[1050,9288,9289,9291],{"class":1052,"line":6477},[1050,9290,2313],{"class":1306},[1050,9292,9293],{"class":1310}," total_deleted\n",[1050,9295,9296],{"class":1052,"line":6482},[1050,9297,1294],{"emptyLinePlaceholder":1293},[1050,9299,9300],{"class":1052,"line":6489},[1050,9301,9302],{"class":1056},"# Query caching strategies\n",[1050,9304,9305,9307,9310],{"class":1052,"line":6499},[1050,9306,1157],{"class":1359},[1050,9308,9309],{"class":1362}," QueryCachingOptimization",[1050,9311,1366],{"class":1073},[1050,9313,9314,9316,9319],{"class":1052,"line":6509},[1050,9315,1373],{"class":1372},[1050,9317,9318],{"class":1376},"Implement query caching for performance",[1050,9320,1380],{"class":1372},[1050,9322,9323],{"class":1052,"line":6514},[1050,9324,1386],{"class":1310},[1050,9326,9327,9329],{"class":1052,"line":6524},[1050,9328,1392],{"class":1073},[1050,9330,1396],{"class":1395},[1050,9332,9333,9335,9338],{"class":1052,"line":6529},[1050,9334,1402],{"class":1359},[1050,9336,9337],{"class":1405}," cache_expensive_queries",[1050,9339,2262],{"class":1073},[1050,9341,9342,9344,9347],{"class":1052,"line":6535},[1050,9343,1422],{"class":1372},[1050,9345,9346],{"class":1376},"Cache results of expensive queries",[1050,9348,1380],{"class":1372},[1050,9350,9351],{"class":1052,"line":6541},[1050,9352,1433],{"class":1310},[1050,9354,9355,9357,9359,9361,9364,9366,9369,9371],{"class":1052,"line":6547},[1050,9356,7617],{"class":1306},[1050,9358,1311],{"class":1310},[1050,9360,1314],{"class":1073},[1050,9362,9363],{"class":1310},"core",[1050,9365,1314],{"class":1073},[1050,9367,9368],{"class":1310},"cache ",[1050,9370,1320],{"class":1306},[1050,9372,9373],{"class":1310}," cache\n",[1050,9375,9376],{"class":1052,"line":6553},[1050,9377,1433],{"class":1310},[1050,9379,9380,9382,9385,9387,9390,9392,9395],{"class":1052,"line":6559},[1050,9381,1439],{"class":1359},[1050,9383,9384],{"class":1405}," get_popular_posts",[1050,9386,1409],{"class":1073},[1050,9388,9389],{"class":1412},"cache_timeout",[1050,9391,1504],{"class":1447},[1050,9393,9394],{"class":1097},"300",[1050,9396,1416],{"class":1073},[1050,9398,9399,9402,9404,9406,9409],{"class":1052,"line":6565},[1050,9400,9401],{"class":1310},"            cache_key ",[1050,9403,1504],{"class":1073},[1050,9405,1164],{"class":1083},[1050,9407,9408],{"class":1087},"popular_posts",[1050,9410,3513],{"class":1083},[1050,9412,9413,9416,9418,9421,9423,9425,9427,9430],{"class":1052,"line":6571},[1050,9414,9415],{"class":1310},"            cached_posts ",[1050,9417,1504],{"class":1073},[1050,9419,9420],{"class":1310}," cache",[1050,9422,1314],{"class":1073},[1050,9424,2138],{"class":1485},[1050,9426,1409],{"class":1073},[1050,9428,9429],{"class":1485},"cache_key",[1050,9431,1540],{"class":1073},[1050,9433,9434],{"class":1052,"line":6577},[1050,9435,1495],{"class":1310},[1050,9437,9438,9440,9443,9446,9449],{"class":1052,"line":6583},[1050,9439,1840],{"class":1306},[1050,9441,9442],{"class":1310}," cached_posts ",[1050,9444,9445],{"class":1447},"is",[1050,9447,9448],{"class":1116}," None",[1050,9450,1366],{"class":1073},[1050,9452,9453],{"class":1052,"line":6589},[1050,9454,9455],{"class":1056},"                # Expensive query\n",[1050,9457,9458,9461,9463,9465],{"class":1052,"line":6595},[1050,9459,9460],{"class":1310},"                cached_posts ",[1050,9462,1504],{"class":1073},[1050,9464,3712],{"class":1395},[1050,9466,3472],{"class":1073},[1050,9468,9469,9471,9473,9475,9477,9479,9481,9483,9485,9487,9489,9491,9493,9495],{"class":1052,"line":6601},[1050,9470,9118],{"class":1485},[1050,9472,1314],{"class":1073},[1050,9474,2660],{"class":1479},[1050,9476,1314],{"class":1073},[1050,9478,2968],{"class":1485},[1050,9480,1409],{"class":1073},[1050,9482,1091],{"class":1083},[1050,9484,2701],{"class":1087},[1050,9486,1091],{"class":1083},[1050,9488,1454],{"class":1073},[1050,9490,1164],{"class":1083},[1050,9492,2817],{"class":1087},[1050,9494,1091],{"class":1083},[1050,9496,1540],{"class":1073},[1050,9498,9499,9501,9503],{"class":1052,"line":6607},[1050,9500,9142],{"class":1073},[1050,9502,4692],{"class":1485},[1050,9504,3472],{"class":1073},[1050,9506,9507,9510,9512,9514,9516,9518,9520,9522],{"class":1052,"line":6613},[1050,9508,9509],{"class":2669},"                                   comment_count",[1050,9511,1504],{"class":1073},[1050,9513,4704],{"class":1485},[1050,9515,1409],{"class":1073},[1050,9517,1091],{"class":1083},[1050,9519,2856],{"class":1087},[1050,9521,1091],{"class":1083},[1050,9523,4715],{"class":1073},[1050,9525,9526,9529,9531,9533,9535,9537,9539,9541,9543,9545,9548,9550,9552,9554,9556,9558,9560],{"class":1052,"line":6619},[1050,9527,9528],{"class":2669},"                                   engagement_score",[1050,9530,1504],{"class":1073},[1050,9532,8448],{"class":1485},[1050,9534,1409],{"class":1073},[1050,9536,1091],{"class":1083},[1050,9538,5455],{"class":1087},[1050,9540,1091],{"class":1083},[1050,9542,1875],{"class":1073},[1050,9544,2152],{"class":1447},[1050,9546,9547],{"class":1485}," Count",[1050,9549,1409],{"class":1073},[1050,9551,1091],{"class":1083},[1050,9553,2856],{"class":1087},[1050,9555,1091],{"class":1083},[1050,9557,1875],{"class":1073},[1050,9559,7895],{"class":1447},[1050,9561,9562],{"class":1097}," 5\n",[1050,9564,9565],{"class":1052,"line":6625},[1050,9566,9567],{"class":1073},"                               )\n",[1050,9569,9570,9572,9574,9576,9578,9580,9582],{"class":1052,"line":6631},[1050,9571,9142],{"class":1073},[1050,9573,2696],{"class":1485},[1050,9575,1409],{"class":1073},[1050,9577,8668],{"class":2669},[1050,9579,1504],{"class":1073},[1050,9581,1986],{"class":1097},[1050,9583,1540],{"class":1073},[1050,9585,9586,9588,9590,9592,9594,9597,9599,9601,9603],{"class":1052,"line":6636},[1050,9587,9142],{"class":1073},[1050,9589,3932],{"class":1485},[1050,9591,1409],{"class":1073},[1050,9593,1091],{"class":1083},[1050,9595,9596],{"class":1087},"-engagement_score",[1050,9598,1091],{"class":1083},[1050,9600,9165],{"class":1073},[1050,9602,5081],{"class":1097},[1050,9604,1834],{"class":1073},[1050,9606,9607],{"class":1052,"line":6641},[1050,9608,4555],{"class":1073},[1050,9610,9611],{"class":1052,"line":6660},[1050,9612,9179],{"class":1310},[1050,9614,9615,9618,9620,9623,9625,9627,9629,9632,9634,9637],{"class":1052,"line":6676},[1050,9616,9617],{"class":1310},"                cache",[1050,9619,1314],{"class":1073},[1050,9621,9622],{"class":1485},"set",[1050,9624,1409],{"class":1073},[1050,9626,9429],{"class":1485},[1050,9628,1454],{"class":1073},[1050,9630,9631],{"class":1485}," cached_posts",[1050,9633,1454],{"class":1073},[1050,9635,9636],{"class":1485}," cache_timeout",[1050,9638,1540],{"class":1073},[1050,9640,9641],{"class":1052,"line":6711},[1050,9642,1495],{"class":1310},[1050,9644,9645,9647],{"class":1052,"line":6755},[1050,9646,2313],{"class":1306},[1050,9648,9649],{"class":1310}," cached_posts\n",[1050,9651,9652],{"class":1052,"line":6760},[1050,9653,1386],{"class":1310},[1050,9655,9656,9658],{"class":1052,"line":6767},[1050,9657,1392],{"class":1073},[1050,9659,1396],{"class":1395},[1050,9661,9662,9664,9667],{"class":1052,"line":6777},[1050,9663,1402],{"class":1359},[1050,9665,9666],{"class":1405}," implement_query_result_caching",[1050,9668,2262],{"class":1073},[1050,9670,9671,9673,9676],{"class":1052,"line":6787},[1050,9672,1422],{"class":1372},[1050,9674,9675],{"class":1376},"Implement automatic query result caching",[1050,9677,1380],{"class":1372},[1050,9679,9680],{"class":1052,"line":6792},[1050,9681,1433],{"class":1310},[1050,9683,9684,9687,9690,9692,9694,9696,9699],{"class":1052,"line":6798},[1050,9685,9686],{"class":1359},"        class",[1050,9688,9689],{"class":1362}," CachedQuerySet",[1050,9691,1409],{"class":1073},[1050,9693,4880],{"class":4879},[1050,9695,1314],{"class":1073},[1050,9697,9698],{"class":4879},"QuerySet",[1050,9700,1416],{"class":1073},[1050,9702,9703,9706,9709,9711,9715],{"class":1052,"line":6808},[1050,9704,9705],{"class":1359},"            def",[1050,9707,9708],{"class":1405}," cache_key",[1050,9710,1409],{"class":1073},[1050,9712,9714],{"class":9713},"sRjD_","self",[1050,9716,1416],{"class":1073},[1050,9718,9719,9722,9725],{"class":1052,"line":6813},[1050,9720,9721],{"class":1372},"                \"\"\"",[1050,9723,9724],{"class":1376},"Generate cache key from query",[1050,9726,1380],{"class":1372},[1050,9728,9729,9732],{"class":1052,"line":6818},[1050,9730,9731],{"class":1306},"                import",[1050,9733,9734],{"class":1310}," hashlib\n",[1050,9736,9737,9740,9742,9744,9746,9748,9750,9752],{"class":1052,"line":6823},[1050,9738,9739],{"class":1310},"                query_str ",[1050,9741,1504],{"class":1073},[1050,9743,2578],{"class":1395},[1050,9745,1409],{"class":1073},[1050,9747,9714],{"class":1069},[1050,9749,1314],{"class":1073},[1050,9751,1938],{"class":1479},[1050,9753,1540],{"class":1073},[1050,9755,9756,9758,9761,9764,9766,9769,9771,9774,9776,9779,9781,9784,9787,9790,9792,9794],{"class":1052,"line":6828},[1050,9757,2458],{"class":1306},[1050,9759,9760],{"class":1359}," f",[1050,9762,9763],{"class":1087},"\"queryset_",[1050,9765,1671],{"class":1670},[1050,9767,9768],{"class":1310},"hashlib",[1050,9770,1314],{"class":1073},[1050,9772,9773],{"class":1485},"md5",[1050,9775,1409],{"class":1073},[1050,9777,9778],{"class":1485},"query_str",[1050,9780,1314],{"class":1073},[1050,9782,9783],{"class":1485},"encode",[1050,9785,9786],{"class":1073},"()).",[1050,9788,9789],{"class":1485},"hexdigest",[1050,9791,2200],{"class":1073},[1050,9793,1682],{"class":1670},[1050,9795,9796],{"class":1087},"\"\n",[1050,9798,9799],{"class":1052,"line":6833},[1050,9800,1495],{"class":1310},[1050,9802,9803,9805,9808,9810,9812,9814,9817,9819,9821],{"class":1052,"line":6838},[1050,9804,9705],{"class":1359},[1050,9806,9807],{"class":1405}," cached",[1050,9809,1409],{"class":1073},[1050,9811,9714],{"class":9713},[1050,9813,1454],{"class":1073},[1050,9815,9816],{"class":1412}," timeout",[1050,9818,1504],{"class":1447},[1050,9820,9394],{"class":1097},[1050,9822,1416],{"class":1073},[1050,9824,9825,9827,9830],{"class":1052,"line":6844},[1050,9826,9721],{"class":1372},[1050,9828,9829],{"class":1376},"Return cached results if available",[1050,9831,1380],{"class":1372},[1050,9833,9834,9837,9839,9842,9844,9846],{"class":1052,"line":6849},[1050,9835,9836],{"class":1310},"                cache_key ",[1050,9838,1504],{"class":1073},[1050,9840,9841],{"class":1069}," self",[1050,9843,1314],{"class":1073},[1050,9845,9429],{"class":1485},[1050,9847,1489],{"class":1073},[1050,9849,9850,9853,9855,9857,9859,9861,9863,9865],{"class":1052,"line":6854},[1050,9851,9852],{"class":1310},"                cached_result ",[1050,9854,1504],{"class":1073},[1050,9856,9420],{"class":1310},[1050,9858,1314],{"class":1073},[1050,9860,2138],{"class":1485},[1050,9862,1409],{"class":1073},[1050,9864,9429],{"class":1485},[1050,9866,1540],{"class":1073},[1050,9868,9869],{"class":1052,"line":6859},[1050,9870,9179],{"class":1310},[1050,9872,9873,9875,9878,9880,9882],{"class":1052,"line":6878},[1050,9874,9184],{"class":1306},[1050,9876,9877],{"class":1310}," cached_result ",[1050,9879,9445],{"class":1447},[1050,9881,9448],{"class":1116},[1050,9883,1366],{"class":1073},[1050,9885,9886,9889,9891,9893,9895,9897],{"class":1052,"line":6894},[1050,9887,9888],{"class":1310},"                    cached_result ",[1050,9890,1504],{"class":1073},[1050,9892,3712],{"class":1395},[1050,9894,1409],{"class":1073},[1050,9896,9714],{"class":1069},[1050,9898,1540],{"class":1073},[1050,9900,9901,9904,9906,9908,9910,9912,9914,9917,9919,9921],{"class":1052,"line":6910},[1050,9902,9903],{"class":1310},"                    cache",[1050,9905,1314],{"class":1073},[1050,9907,9622],{"class":1485},[1050,9909,1409],{"class":1073},[1050,9911,9429],{"class":1485},[1050,9913,1454],{"class":1073},[1050,9915,9916],{"class":1485}," cached_result",[1050,9918,1454],{"class":1073},[1050,9920,9816],{"class":1485},[1050,9922,1540],{"class":1073},[1050,9924,9925],{"class":1052,"line":6915},[1050,9926,9179],{"class":1310},[1050,9928,9929,9931],{"class":1052,"line":6945},[1050,9930,2458],{"class":1306},[1050,9932,9933],{"class":1310}," cached_result\n",[1050,9935,9936],{"class":1052,"line":6952},[1050,9937,1433],{"class":1310},[1050,9939,9940,9942,9945,9947,9949,9951,9954],{"class":1052,"line":6979},[1050,9941,9686],{"class":1359},[1050,9943,9944],{"class":1362}," CachedManager",[1050,9946,1409],{"class":1073},[1050,9948,4880],{"class":4879},[1050,9950,1314],{"class":1073},[1050,9952,9953],{"class":4879},"Manager",[1050,9955,1416],{"class":1073},[1050,9957,9958,9960,9963,9965,9967],{"class":1052,"line":7012},[1050,9959,9705],{"class":1359},[1050,9961,9962],{"class":1405}," get_queryset",[1050,9964,1409],{"class":1073},[1050,9966,9714],{"class":9713},[1050,9968,1416],{"class":1073},[1050,9970,9971,9973,9975,9977,9979,9981,9984,9986,9989,9991,9993,9995,9998],{"class":1052,"line":7025},[1050,9972,2458],{"class":1306},[1050,9974,9689],{"class":1485},[1050,9976,1409],{"class":1073},[1050,9978,9714],{"class":1069},[1050,9980,1314],{"class":1073},[1050,9982,9983],{"class":1479},"model",[1050,9985,1454],{"class":1073},[1050,9987,9988],{"class":2669}," using",[1050,9990,1504],{"class":1073},[1050,9992,9714],{"class":1069},[1050,9994,1314],{"class":1073},[1050,9996,9997],{"class":1479},"_db",[1050,9999,1540],{"class":1073},[1050,10001,10002],{"class":1052,"line":7055},[1050,10003,1433],{"class":1310},[1050,10005,10006],{"class":1052,"line":7060},[1050,10007,10008],{"class":1056},"        # Usage in model\n",[1050,10010,10011,10013,10016,10018,10020],{"class":1052,"line":7067},[1050,10012,9686],{"class":1359},[1050,10014,10015],{"class":1362}," CachedPost",[1050,10017,1409],{"class":1073},[1050,10019,4077],{"class":4879},[1050,10021,1416],{"class":1073},[1050,10023,10024,10027,10029,10031],{"class":1052,"line":7077},[1050,10025,10026],{"class":1310},"            cached_objects ",[1050,10028,1504],{"class":1073},[1050,10030,9944],{"class":1485},[1050,10032,1489],{"class":1073},[1050,10034,10035],{"class":1052,"line":7087},[1050,10036,1495],{"class":1310},[1050,10038,10039,10042,10044],{"class":1052,"line":7092},[1050,10040,10041],{"class":1359},"            class",[1050,10043,5241],{"class":1362},[1050,10045,1366],{"class":1073},[1050,10047,10048,10051,10053],{"class":1052,"line":7111},[1050,10049,10050],{"class":1310},"                proxy ",[1050,10052,1504],{"class":1073},[1050,10054,10055],{"class":1116}," True\n",[1050,10057,10058],{"class":1052,"line":7117},[1050,10059,1433],{"class":1310},[1050,10061,10062],{"class":1052,"line":7137},[1050,10063,10064],{"class":1056},"        # Usage\n",[1050,10066,10067],{"class":1052,"line":7142},[1050,10068,10069],{"class":1056},"        # popular_posts = CachedPost.cached_objects.filter(view_count__gte=1000).cached()\n",[1050,10071,10072],{"class":1052,"line":7148},[1050,10073,1386],{"class":1310},[1050,10075,10076,10078],{"class":1052,"line":7158},[1050,10077,1392],{"class":1073},[1050,10079,1396],{"class":1395},[1050,10081,10082,10084,10087],{"class":1052,"line":7164},[1050,10083,1402],{"class":1359},[1050,10085,10086],{"class":1405}," invalidate_related_caches",[1050,10088,2262],{"class":1073},[1050,10090,10091,10093,10096],{"class":1052,"line":7170},[1050,10092,1422],{"class":1372},[1050,10094,10095],{"class":1376},"Invalidate caches when data changes",[1050,10097,1380],{"class":1372},[1050,10099,10100],{"class":1052,"line":7176},[1050,10101,1433],{"class":1310},[1050,10103,10104,10106,10108,10110,10112,10114,10116,10118,10121,10123,10126,10128],{"class":1052,"line":7182},[1050,10105,7617],{"class":1306},[1050,10107,1311],{"class":1310},[1050,10109,1314],{"class":1073},[1050,10111,3169],{"class":1310},[1050,10113,1314],{"class":1073},[1050,10115,4880],{"class":1310},[1050,10117,1314],{"class":1073},[1050,10119,10120],{"class":1310},"signals ",[1050,10122,1320],{"class":1306},[1050,10124,10125],{"class":1310}," post_save",[1050,10127,1454],{"class":1073},[1050,10129,10130],{"class":1310}," post_delete\n",[1050,10132,10133,10135,10137,10139,10142,10144],{"class":1052,"line":7188},[1050,10134,7617],{"class":1306},[1050,10136,1311],{"class":1310},[1050,10138,1314],{"class":1073},[1050,10140,10141],{"class":1310},"dispatch ",[1050,10143,1320],{"class":1306},[1050,10145,10146],{"class":1310}," receiver\n",[1050,10148,10149],{"class":1052,"line":7194},[1050,10150,1433],{"class":1310},[1050,10152,10153,10156,10159,10162,10165,10167,10170,10173,10176,10178,10180],{"class":1052,"line":7200},[1050,10154,10155],{"class":1073},"        @",[1050,10157,10158],{"class":1405},"receiver",[1050,10160,10161],{"class":1073},"([",[1050,10163,10164],{"class":1485},"post_save",[1050,10166,1454],{"class":1073},[1050,10168,10169],{"class":1485}," post_delete",[1050,10171,10172],{"class":1073},"],",[1050,10174,10175],{"class":2669}," sender",[1050,10177,1504],{"class":1073},[1050,10179,4077],{"class":1485},[1050,10181,1540],{"class":1073},[1050,10183,10184,10186,10189,10191,10194,10196,10198,10200],{"class":1052,"line":7206},[1050,10185,1439],{"class":1359},[1050,10187,10188],{"class":1405}," invalidate_post_caches",[1050,10190,1409],{"class":1073},[1050,10192,10193],{"class":1412},"sender",[1050,10195,1454],{"class":1073},[1050,10197,1457],{"class":1447},[1050,10199,1460],{"class":1412},[1050,10201,1416],{"class":1073},[1050,10203,10204,10206,10209],{"class":1052,"line":7212},[1050,10205,4370],{"class":1372},[1050,10207,10208],{"class":1376},"Invalidate post-related caches",[1050,10210,1380],{"class":1372},[1050,10212,10213],{"class":1052,"line":7218},[1050,10214,1495],{"class":1310},[1050,10216,10217,10220,10222],{"class":1052,"line":7224},[1050,10218,10219],{"class":1310},"            cache_keys_to_invalidate ",[1050,10221,1504],{"class":1073},[1050,10223,5258],{"class":1073},[1050,10225,10226,10228,10230,10232],{"class":1052,"line":7229},[1050,10227,3872],{"class":1083},[1050,10229,9408],{"class":1087},[1050,10231,1091],{"class":1083},[1050,10233,1101],{"class":1073},[1050,10235,10236,10238,10241,10243],{"class":1052,"line":7234},[1050,10237,3872],{"class":1083},[1050,10239,10240],{"class":1087},"recent_posts",[1050,10242,1091],{"class":1083},[1050,10244,1101],{"class":1073},[1050,10246,10247,10249,10252,10254],{"class":1052,"line":7250},[1050,10248,3872],{"class":1083},[1050,10250,10251],{"class":1087},"featured_posts",[1050,10253,1091],{"class":1083},[1050,10255,1101],{"class":1073},[1050,10257,10259],{"class":1052,"line":10258},251,[1050,10260,8831],{"class":1073},[1050,10262,10264],{"class":1052,"line":10263},252,[1050,10265,1495],{"class":1310},[1050,10267,10269,10271,10274,10276,10279],{"class":1052,"line":10268},253,[1050,10270,2023],{"class":1306},[1050,10272,10273],{"class":1310}," key ",[1050,10275,1633],{"class":1306},[1050,10277,10278],{"class":1310}," cache_keys_to_invalidate",[1050,10280,1366],{"class":1073},[1050,10282,10284,10286,10288,10290,10292,10295],{"class":1052,"line":10283},254,[1050,10285,9617],{"class":1310},[1050,10287,1314],{"class":1073},[1050,10289,9238],{"class":1485},[1050,10291,1409],{"class":1073},[1050,10293,10294],{"class":1485},"key",[1050,10296,1540],{"class":1073},[1050,10298,10300],{"class":1052,"line":10299},255,[1050,10301,1495],{"class":1310},[1050,10303,10305],{"class":1052,"line":10304},256,[1050,10306,10307],{"class":1056},"            # Invalidate category-specific caches\n",[1050,10309,10311,10314,10316,10319,10321,10323,10325,10327,10330,10332],{"class":1052,"line":10310},257,[1050,10312,10313],{"class":1310},"            instance ",[1050,10315,1504],{"class":1073},[1050,10317,10318],{"class":1310}," kwargs",[1050,10320,1314],{"class":1073},[1050,10322,2138],{"class":1485},[1050,10324,1409],{"class":1073},[1050,10326,1091],{"class":1083},[1050,10328,10329],{"class":1087},"instance",[1050,10331,1091],{"class":1083},[1050,10333,1540],{"class":1073},[1050,10335,10337,10339,10342,10344,10347,10349,10351],{"class":1052,"line":10336},258,[1050,10338,1840],{"class":1306},[1050,10340,10341],{"class":1310}," instance ",[1050,10343,8141],{"class":1447},[1050,10345,10346],{"class":1310}," instance",[1050,10348,1314],{"class":1073},[1050,10350,2817],{"class":1479},[1050,10352,1366],{"class":1073},[1050,10354,10356,10358,10360,10362,10364,10366,10369,10371,10373,10375,10377,10379,10381,10383,10385],{"class":1052,"line":10355},259,[1050,10357,9617],{"class":1310},[1050,10359,1314],{"class":1073},[1050,10361,9238],{"class":1485},[1050,10363,1409],{"class":1073},[1050,10365,1658],{"class":1359},[1050,10367,10368],{"class":1087},"'category_posts_",[1050,10370,1671],{"class":1670},[1050,10372,10329],{"class":1485},[1050,10374,1314],{"class":1073},[1050,10376,2817],{"class":1479},[1050,10378,1314],{"class":1073},[1050,10380,2670],{"class":1479},[1050,10382,1682],{"class":1670},[1050,10384,1091],{"class":1087},[1050,10386,1540],{"class":1073},[1050,10388,10390],{"class":1052,"line":10389},260,[1050,10391,1294],{"emptyLinePlaceholder":1293},[1050,10393,10395],{"class":1052,"line":10394},261,[1050,10396,10397],{"class":1056},"# Database connection optimization\n",[1050,10399,10401,10403,10406],{"class":1052,"line":10400},262,[1050,10402,1157],{"class":1359},[1050,10404,10405],{"class":1362}," ConnectionOptimization",[1050,10407,1366],{"class":1073},[1050,10409,10411,10413,10416],{"class":1052,"line":10410},263,[1050,10412,1373],{"class":1372},[1050,10414,10415],{"class":1376},"Optimize database connections",[1050,10417,1380],{"class":1372},[1050,10419,10421],{"class":1052,"line":10420},264,[1050,10422,1386],{"class":1310},[1050,10424,10426,10428],{"class":1052,"line":10425},265,[1050,10427,1392],{"class":1073},[1050,10429,1396],{"class":1395},[1050,10431,10433,10435,10438],{"class":1052,"line":10432},266,[1050,10434,1402],{"class":1359},[1050,10436,10437],{"class":1405}," configure_connection_pooling",[1050,10439,2262],{"class":1073},[1050,10441,10443,10445,10448],{"class":1052,"line":10442},267,[1050,10444,1422],{"class":1372},[1050,10446,10447],{"class":1376},"Configure connection pooling for better performance",[1050,10449,1380],{"class":1372},[1050,10451,10453],{"class":1052,"line":10452},268,[1050,10454,1433],{"class":1310},[1050,10456,10458],{"class":1052,"line":10457},269,[1050,10459,10460],{"class":1056},"        # Example configuration for django-db-pool\n",[1050,10462,10464,10467,10469],{"class":1052,"line":10463},270,[1050,10465,10466],{"class":1310},"        connection_pool_settings ",[1050,10468,1504],{"class":1073},[1050,10470,1077],{"class":1073},[1050,10472,10474,10476,10478,10480,10482],{"class":1052,"line":10473},271,[1050,10475,1154],{"class":1083},[1050,10477,5116],{"class":1087},[1050,10479,1091],{"class":1083},[1050,10481,1094],{"class":1073},[1050,10483,1077],{"class":1073},[1050,10485,10487,10489,10492,10494,10496,10498,10501,10503],{"class":1052,"line":10486},272,[1050,10488,3872],{"class":1083},[1050,10490,10491],{"class":1087},"ENGINE",[1050,10493,1091],{"class":1083},[1050,10495,1094],{"class":1073},[1050,10497,1164],{"class":1083},[1050,10499,10500],{"class":1087},"django_db_pool.backends.postgresql",[1050,10502,1091],{"class":1083},[1050,10504,1101],{"class":1073},[1050,10506,10508,10510,10513,10515,10517,10519,10522,10524],{"class":1052,"line":10507},273,[1050,10509,3872],{"class":1083},[1050,10511,10512],{"class":1087},"NAME",[1050,10514,1091],{"class":1083},[1050,10516,1094],{"class":1073},[1050,10518,1164],{"class":1083},[1050,10520,10521],{"class":1087},"myapp_db",[1050,10523,1091],{"class":1083},[1050,10525,1101],{"class":1073},[1050,10527,10529,10531,10534,10536,10538,10540,10543,10545],{"class":1052,"line":10528},274,[1050,10530,3872],{"class":1083},[1050,10532,10533],{"class":1087},"USER",[1050,10535,1091],{"class":1083},[1050,10537,1094],{"class":1073},[1050,10539,1164],{"class":1083},[1050,10541,10542],{"class":1087},"postgres",[1050,10544,1091],{"class":1083},[1050,10546,1101],{"class":1073},[1050,10548,10550,10552,10555,10557,10559,10561,10564,10566],{"class":1052,"line":10549},275,[1050,10551,3872],{"class":1083},[1050,10553,10554],{"class":1087},"PASSWORD",[1050,10556,1091],{"class":1083},[1050,10558,1094],{"class":1073},[1050,10560,1164],{"class":1083},[1050,10562,10563],{"class":1087},"password",[1050,10565,1091],{"class":1083},[1050,10567,1101],{"class":1073},[1050,10569,10571,10573,10576,10578,10580,10582,10585,10587],{"class":1052,"line":10570},276,[1050,10572,3872],{"class":1083},[1050,10574,10575],{"class":1087},"HOST",[1050,10577,1091],{"class":1083},[1050,10579,1094],{"class":1073},[1050,10581,1164],{"class":1083},[1050,10583,10584],{"class":1087},"localhost",[1050,10586,1091],{"class":1083},[1050,10588,1101],{"class":1073},[1050,10590,10592,10594,10597,10599,10601,10603,10606,10608],{"class":1052,"line":10591},277,[1050,10593,3872],{"class":1083},[1050,10595,10596],{"class":1087},"PORT",[1050,10598,1091],{"class":1083},[1050,10600,1094],{"class":1073},[1050,10602,1164],{"class":1083},[1050,10604,10605],{"class":1087},"5432",[1050,10607,1091],{"class":1083},[1050,10609,1101],{"class":1073},[1050,10611,10613,10615,10618,10620,10622],{"class":1052,"line":10612},278,[1050,10614,3872],{"class":1083},[1050,10616,10617],{"class":1087},"POOL_OPTIONS",[1050,10619,1091],{"class":1083},[1050,10621,1094],{"class":1073},[1050,10623,1077],{"class":1073},[1050,10625,10627,10630,10633,10635,10637,10640],{"class":1052,"line":10626},279,[1050,10628,10629],{"class":1083},"                    '",[1050,10631,10632],{"class":1087},"POOL_SIZE",[1050,10634,1091],{"class":1083},[1050,10636,1094],{"class":1073},[1050,10638,10639],{"class":1097}," 20",[1050,10641,1101],{"class":1073},[1050,10643,10645,10647,10650,10652,10654,10657],{"class":1052,"line":10644},280,[1050,10646,10629],{"class":1083},[1050,10648,10649],{"class":1087},"MAX_OVERFLOW",[1050,10651,1091],{"class":1083},[1050,10653,1094],{"class":1073},[1050,10655,10656],{"class":1097}," 30",[1050,10658,1101],{"class":1073},[1050,10660,10662,10664,10667,10669,10671,10674,10676],{"class":1052,"line":10661},281,[1050,10663,10629],{"class":1083},[1050,10665,10666],{"class":1087},"RECYCLE",[1050,10668,1091],{"class":1083},[1050,10670,1094],{"class":1073},[1050,10672,10673],{"class":1097}," 3600",[1050,10675,1454],{"class":1073},[1050,10677,10678],{"class":1056},"  # Recycle connections after 1 hour\n",[1050,10680,10682,10684,10687,10689,10691,10693,10695],{"class":1052,"line":10681},282,[1050,10683,10629],{"class":1083},[1050,10685,10686],{"class":1087},"PRE_PING",[1050,10688,1091],{"class":1083},[1050,10690,1094],{"class":1073},[1050,10692,9095],{"class":1116},[1050,10694,1454],{"class":1073},[1050,10696,10697],{"class":1056},"  # Validate connections before use\n",[1050,10699,10701],{"class":1052,"line":10700},283,[1050,10702,10703],{"class":1073},"                },\n",[1050,10705,10707],{"class":1052,"line":10706},284,[1050,10708,8209],{"class":1073},[1050,10710,10712],{"class":1052,"line":10711},285,[1050,10713,10714],{"class":1073},"        }\n",[1050,10716,10718],{"class":1052,"line":10717},286,[1050,10719,1433],{"class":1310},[1050,10721,10723,10725],{"class":1052,"line":10722},287,[1050,10724,2327],{"class":1306},[1050,10726,10727],{"class":1310}," connection_pool_settings\n",[1050,10729,10731],{"class":1052,"line":10730},288,[1050,10732,1386],{"class":1310},[1050,10734,10736,10738],{"class":1052,"line":10735},289,[1050,10737,1392],{"class":1073},[1050,10739,1396],{"class":1395},[1050,10741,10743,10745,10748],{"class":1052,"line":10742},290,[1050,10744,1402],{"class":1359},[1050,10746,10747],{"class":1405}," optimize_connection_settings",[1050,10749,2262],{"class":1073},[1050,10751,10753,10755,10758],{"class":1052,"line":10752},291,[1050,10754,1422],{"class":1372},[1050,10756,10757],{"class":1376},"Optimize database connection settings",[1050,10759,1380],{"class":1372},[1050,10761,10763],{"class":1052,"line":10762},292,[1050,10764,1433],{"class":1310},[1050,10766,10768,10771,10773],{"class":1052,"line":10767},293,[1050,10769,10770],{"class":1310},"        optimized_settings ",[1050,10772,1504],{"class":1073},[1050,10774,1077],{"class":1073},[1050,10776,10778,10780,10782,10784,10786],{"class":1052,"line":10777},294,[1050,10779,1154],{"class":1083},[1050,10781,5116],{"class":1087},[1050,10783,1091],{"class":1083},[1050,10785,1094],{"class":1073},[1050,10787,1077],{"class":1073},[1050,10789,10791,10793,10795,10797,10799,10801,10804,10806],{"class":1052,"line":10790},295,[1050,10792,3872],{"class":1083},[1050,10794,10491],{"class":1087},[1050,10796,1091],{"class":1083},[1050,10798,1094],{"class":1073},[1050,10800,1164],{"class":1083},[1050,10802,10803],{"class":1087},"django.db.backends.postgresql",[1050,10805,1091],{"class":1083},[1050,10807,1101],{"class":1073},[1050,10809,10811,10813,10816,10818,10820],{"class":1052,"line":10810},296,[1050,10812,3872],{"class":1083},[1050,10814,10815],{"class":1087},"OPTIONS",[1050,10817,1091],{"class":1083},[1050,10819,1094],{"class":1073},[1050,10821,1077],{"class":1073},[1050,10823,10825],{"class":1052,"line":10824},297,[1050,10826,10827],{"class":1056},"                    # Connection settings\n",[1050,10829,10831,10833,10836,10838,10840,10842],{"class":1052,"line":10830},298,[1050,10832,10629],{"class":1083},[1050,10834,10835],{"class":1087},"MAX_CONNS",[1050,10837,1091],{"class":1083},[1050,10839,1094],{"class":1073},[1050,10841,10639],{"class":1097},[1050,10843,1101],{"class":1073},[1050,10845,10847,10849,10852,10854,10856,10859],{"class":1052,"line":10846},299,[1050,10848,10629],{"class":1083},[1050,10850,10851],{"class":1087},"connect_timeout",[1050,10853,1091],{"class":1083},[1050,10855,1094],{"class":1073},[1050,10857,10858],{"class":1097}," 10",[1050,10860,1101],{"class":1073},[1050,10862,10864],{"class":1052,"line":10863},300,[1050,10865,10866],{"class":1310},"                    \n",[1050,10868,10870],{"class":1052,"line":10869},301,[1050,10871,10872],{"class":1056},"                    # Performance settings\n",[1050,10874,10876,10878,10881,10883,10885],{"class":1052,"line":10875},302,[1050,10877,10629],{"class":1083},[1050,10879,10880],{"class":1087},"init_command",[1050,10882,1091],{"class":1083},[1050,10884,1094],{"class":1073},[1050,10886,5643],{"class":1083},[1050,10888,10890],{"class":1052,"line":10889},303,[1050,10891,10892],{"class":1087},"                        SET default_transaction_isolation TO 'read committed';\n",[1050,10894,10896],{"class":1052,"line":10895},304,[1050,10897,10898],{"class":1087},"                        SET timezone TO 'UTC';\n",[1050,10900,10902],{"class":1052,"line":10901},305,[1050,10903,10904],{"class":1087},"                        SET shared_preload_libraries TO 'pg_stat_statements';\n",[1050,10906,10908,10911],{"class":1052,"line":10907},306,[1050,10909,10910],{"class":1083},"                    \"\"\"",[1050,10912,1101],{"class":1073},[1050,10914,10916],{"class":1052,"line":10915},307,[1050,10917,10866],{"class":1310},[1050,10919,10921],{"class":1052,"line":10920},308,[1050,10922,10923],{"class":1056},"                    # Memory settings\n",[1050,10925,10927,10929,10932,10934,10936,10938,10941,10943],{"class":1052,"line":10926},309,[1050,10928,10629],{"class":1083},[1050,10930,10931],{"class":1087},"work_mem",[1050,10933,1091],{"class":1083},[1050,10935,1094],{"class":1073},[1050,10937,1164],{"class":1083},[1050,10939,10940],{"class":1087},"256MB",[1050,10942,1091],{"class":1083},[1050,10944,1101],{"class":1073},[1050,10946,10948,10950,10953,10955,10957,10959,10962,10964],{"class":1052,"line":10947},310,[1050,10949,10629],{"class":1083},[1050,10951,10952],{"class":1087},"shared_buffers",[1050,10954,1091],{"class":1083},[1050,10956,1094],{"class":1073},[1050,10958,1164],{"class":1083},[1050,10960,10961],{"class":1087},"1GB",[1050,10963,1091],{"class":1083},[1050,10965,1101],{"class":1073},[1050,10967,10969,10971,10974,10976,10978,10980,10983,10985],{"class":1052,"line":10968},311,[1050,10970,10629],{"class":1083},[1050,10972,10973],{"class":1087},"effective_cache_size",[1050,10975,1091],{"class":1083},[1050,10977,1094],{"class":1073},[1050,10979,1164],{"class":1083},[1050,10981,10982],{"class":1087},"4GB",[1050,10984,1091],{"class":1083},[1050,10986,1101],{"class":1073},[1050,10988,10990],{"class":1052,"line":10989},312,[1050,10991,10703],{"class":1073},[1050,10993,10995],{"class":1052,"line":10994},313,[1050,10996,8209],{"class":1073},[1050,10998,11000],{"class":1052,"line":10999},314,[1050,11001,10714],{"class":1073},[1050,11003,11005],{"class":1052,"line":11004},315,[1050,11006,1433],{"class":1310},[1050,11008,11010,11012],{"class":1052,"line":11009},316,[1050,11011,2327],{"class":1306},[1050,11013,11014],{"class":1310}," optimized_settings\n",[1026,11016,11017],{},"Database optimization is an ongoing process that requires monitoring, analysis, and iterative improvements. By understanding query patterns, implementing proper indexing strategies, and using Django's ORM efficiently, you can build applications that scale effectively with your data growth.",[11019,11020,11021],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}",{"title":1045,"searchDepth":1053,"depth":1060,"links":11023},[11024,11028,11031],{"id":1032,"depth":1060,"text":1033,"children":11025},[11026,11027],{"id":1037,"depth":1066,"text":1038},{"id":3152,"depth":1066,"text":3153},{"id":4833,"depth":1060,"text":4834,"children":11029},[11030],{"id":4837,"depth":1066,"text":4838},{"id":7263,"depth":1060,"text":7264,"children":11032},[11033],{"id":7267,"depth":1066,"text":7268},"md",null,{},{"title":320,"description":1028},"sLGCD_eBVfnAmsPzvToRj_qEWMwf8V_VGgqXncfdDxs",[11040,11042],{"title":316,"path":317,"stem":318,"description":11041,"children":-1},"Database instrumentation provides visibility into your application's database performance, helping you identify bottlenecks, monitor query patterns, and optimize database operations. Understanding how to implement comprehensive monitoring enables proactive performance management.",{"title":324,"path":325,"stem":326,"description":11043,"children":-1},"Fixtures provide a way to pre-populate your database with data for testing, development, and initial application setup. Understanding how to create, manage, and use fixtures effectively enables consistent data management across different environments.",1772474921351]