About django-index-design
django-index-design is a skill for developers optimizing Django queries with indexes. It starts from query plans, guides index selection and migration choices, and requires validation against production-like data and operational risks.
Key features
- 01Profile the target query first
- 02Choose an index shape for filters and ordering
- 03Express indexes in models or migrations
- 04Validate plans on production-like data
- 05Assess write, locking, and rollback risks
Use cases
- 01Optimize a measured slow query
- 02Add indexes to live PostgreSQL tables
- 03Review index migration safety
- 04Remove indexes after checking production usage
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-index-designAfter installing, type/django-index-designin Claude Code to confirm it loaded.
Bundled filesreferences/index-patterns.md
Details
From the project READMEDjango Index Design
Use this skill to add or change indexes only after profiling shows a specific query can benefit. Indexes speed selected reads and constraints, but they add write cost, migration risk, and maintenance overhead.
Workflow
-
Start from a query plan.
- Capture the SQL, filters, joins, ordering, selected columns, table sizes, and current indexes.
- Confirm that the query is important enough to optimize.
-
Choose the index shape.
- Equality filters first, then range/order fields when useful.
- Match
ORDER BYforLIMITqueries when possible. - Use partial indexes for highly queried subsets.
- Use covering indexes only when selected columns are stable and index-only scans are plausible.
- Use GIN for JSONB containment, arrays, and full-text patterns; do not expect a B-tree to solve those.
-
Express the index in Django models or migrations.
- Prefer
Meta.indexesfor normal model-owned indexes. - Prefer
AddIndexConcurrentlyandRemoveIndexConcurrentlyfor live PostgreSQL tables. - Use raw SQL only when Django cannot express the index.
- Prefer
-
Validate on production-like data.
- Re-run
QuerySet.explain()orEXPLAIN ANALYZE. - Verify the planner uses the index for the target query.
- Check write-path impact when the indexed table is hot.
- Re-run
See index-patterns.md for index examples and migration templates.
Production Rules
- For PostgreSQL live tables, use concurrent index operations and set the migration
atomic = False. - Keep names short, stable, and explicit.
- Do not add duplicate indexes that are already covered by a unique constraint or a left-prefix composite index.
- Remove unused indexes only after checking production usage and deployment rollback needs.
Verification
Finish with before/after plan evidence, the exact migration operation, and the operational risk assessment for locks, writes, and rollback.