database-optimization
Skill16 starsChanged 4 days agoMITView on GitHub
Schema design, index strategy, migration safety, and query analysis. TRIGGER when: designing tables or indexes, writing a migration, or diagnosing a slow query. SKIP: writing ORM model code (use python-patterns); generic backend patterns (use python-patterns).
- Deletes or force-pushes
3 other projects use a version of this.
Adopted by
Most recently taken up by
- valentinesamuel/claude-skillstheir own version, first seen Nov 8, 2026
- Abdox-menara/guard-skillstheir own version, first seen Aug 24, 2026
- Adhamxon/claude-code-skillstheir own version, first seen Jul 30, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- Adhamxon/claude-code-skills★ 2same name
- valentinesamuel/claude-skills★ 1same name
- Abdox-menara/guard-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository39 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- agent-commsSkill
- agent-memorySkill
- api-designSkill
- context-engineeringSkill
- distillSkill
- docker-templatesSkill
- error-handlingSkill
- frontend-designSkill
- github-actions-templateSkill
- git-operationsSkill
- logging-standardsSkill
- mcp-toolsSkill
- monitoring-observabilitySkill
- mui-stylingSkill
- necessity-firstSkill
- pattern-recognitionSkill
- planning-methodologySkill
- python-patternsSkill
- quality-validationSkill
- react-patternsSkill
- research-methodologySkill
- reverse-engineer-anythingSkill
- security-review-checklistsSkill
- semantic-memory-mcpSkill
- skill-authoringSkill
- sofa-searchSkill
- spec-designSkill
- spec-developSkill
- spec-researchSkill
- spec-reviewSkill
- spec-workflowSkill
- state-managementSkill
- systematic-debuggingSkill
- testing-strategySkill
- ui-ux-pro-maxSkill
- verification-before-completionSkill
- watch-patternsSkill
- worktree-managementSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 6 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 46
ADD CONSTRAINT (with validation)
- Distinctive: line 91
Use foreign keys and index them
- Distinctive: line 93
Test with production-like data
- Distinctive: line 107
Keep transactions short; avoid I/O inside transactions
- Distinctive: line 109
Default isolation: Read Committed (usually sufficient)
- Distinctive: line 110
Use Serializable only when phantom reads are unacceptable
- Very specific: line 176
All models inherit from the shared declarative Base and follow these patterns:
- Very specific: line 214
Safe pattern: Always include both upgrade() and downgrade() functions
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Schema Design Principles
| Form | Use When |
| 1NF | Always (atomic values) |
| 2NF | Most tables |
| 3NF | Transactional data |
| Denormalized | Read-heavy, reporting |
Index Strategy
| Type | Use Case |
| B-Tree | Default, range queries |
| Hash | Exact match only |
| GIN (Postgres) | Full-text, JSONB, arrays |
| Partial | Subset of rows |
| Composite | Multi-column queries |
Index type names vary by engine (e.g. GIN/GiST/BRIN are Postgres-specific; MySQL/SQLite expose a different set). Treat engine-specific rows as examples.
When to Index
- Primary keys (automatic)
- Foreign keys
- WHERE clause columns
- ORDER BY columns
- JOIN columns
When NOT to Index
- Low cardinality columns
- Frequently updated columns
- Small tables (< 1000 rows)
Migration Safety
Safe Operations
- ADD COLUMN (nullable)
- ADD INDEX CONCURRENTLY
- CREATE TABLE
- ADD CONSTRAINT (with validation)
Dangerous Operations
- DROP COLUMN
- RENAME COLUMN
- ALTER COLUMN TYPE
- DROP TABLE
Migration Checklist
- Tested on production-like data
- Rollback script ready
- Estimated execution time
- Lock impact assessed
- Application compatibility verified
Query Analysis
Common Issues
| Issue | Symptom | Solution |
| Missing index | Sequential scan | Add index |
| N+1 queries | Many similar queries | Eager loading |
| Over-fetching | SELECT * | Select specific columns |
| No pagination | Large result sets | Add LIMIT/OFFSET |
| Cartesian join | Exploding rows | Fix JOIN conditions |
Analysis Commands
Frontend
npm run build -- --analyze- Bundle analysislighthouse- Performance audit- Browser DevTools Performance tab
Backend (Python)
py-spy- CPU profilingmemory_profiler- Memory analysisEXPLAIN ANALYZE- Query analysis
Best Practices
DO
- Measure before optimizing
- Design database for future scale
- Document schema decisions
- Use foreign keys and index them
- Plan migrations carefully
- Test with production-like data
- Focus on user-impacting metrics
DON'T
- Optimize prematurely
- Guess at bottlenecks
- Use SELECT *
- Skip foreign keys
- Over-index
- Modify released migrations
- Ignore query plans
Transaction Guidelines
- Keep transactions short; avoid I/O inside transactions
- Handle deadlocks with retry logic
- Default isolation: Read Committed (usually sufficient)
- Use Serializable only when phantom reads are unacceptable
Connection Pooling
| Setting | Development | Production |
| Min connections | 1 | 5 |
| Max connections | 5 | 20-50 |
| Idle timeout | 30s | 300s |
| Max lifetime | 1800s | 3600s |
Pool size formula: (cores * 2) + disk_spindles. Always use pooling in production.
Naming Conventions
| Element | Convention | Example |
| Tables | snake_case, plural | users, order_items |
| Columns | snake_case | first_name, created_at |
| Primary Key | id | id |
| Foreign Key | {table}_id | user_id, order_id |
| Indexes | ix_{table}_{columns} | ix_users_email |
Example: Async SQLAlchemy schema patterns (illustrative)
Illustrative — this is one team's SQLAlchemy/Postgres setup shown as a concrete example. Substitute your ORM, driver, and schema conventions. The schema-design, indexing, and query-analysis guidance above is the engine-agnostic, reusable part.
Async SQLAlchemy Setup (<your-database-module>.py)
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
engine = create_async_engine(
DATABASE_URL, # postgresql+asyncpg://...
echo=False, future=True,
pool_size=5, max_overflow=10,
pool_recycle=3600, # Recycle connections after 1 hour
pool_pre_ping=True, # Detect stale connections
)
async_session_maker = async_sessionmaker(
engine, class_=AsyncSession, expire_on_commit=False
)Session dependency (commit-on-success, rollback-on-error):
async def get_db() -> AsyncGenerator[AsyncSession, None]:
async with async_session_maker() as session:
try:
yield session
await session.commit()
except Exception:
await session.rollback()
raiseModel Conventions
All models inherit from the shared declarative Base and follow these patterns:
| Convention | Pattern | Example |
| Primary key | String(36), UUID as string | id: Mapped[str] = mapped_column(String(36), primary_key=True) |
| Timestamps | DateTime(timezone=True) + utc_now | created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utc_now) |
| Foreign keys | Explicit ondelete policy | ForeignKey("projects.id", ondelete="CASCADE") |
| Nullable FK | ondelete="SET NULL" | ForeignKey("users.id", ondelete="SET NULL") |
| Indexes | On FKs and query columns | index=True on project_id, created_at, github_id |
| Type hints | Mapped[] with mapped_column | SQLAlchemy 2.0 declarative style |
| Relationships | TYPE_CHECKING guard for imports | Avoids circular imports between modules |
Models Overview
| Table | Model | Key Fields |
projects | Project | id, path (unique), name, created_at |
task_refs | TaskRef | id, project_id (FK), conversation_id, session_id, created_by (FK) |
users | User | id (uuid4), github_id (unique), github_login, avatar_url |
user_projects | UserProject | user_id (FK), project_id (FK), role, UniqueConstraint |
Relationship Patterns
# Parent side - cascade delete orphans
tasks: Mapped[list["TaskRef"]] = relationship(
"TaskRef", back_populates="project", cascade="all, delete-orphan"
)
# Child side
project: Mapped["Project"] = relationship("Project", back_populates="tasks")Alembic Migration Conventions
- Sync driver: Alembic uses
psycopg2(strips+asyncpgfrom URL) - Advisory locks:
pg_advisory_lock(1573678)prevents concurrent migrations - Schema validation:
main.pyvalidates ORM vs DB schema on startup, logs warnings - Migration file naming:
{hash}_{description}.pywithupgrade()anddowngrade() - All models imported in
env.py: Required for autogenerate support - Safe pattern: Always include both
upgrade()anddowngrade()functions
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

