db-optimization
PostgreSQL database optimization with EF Core - detect and fix N+1, missing indexes, missing pagination, and incorrect use of AsNoTracking.
Skill by ArkadiuszSieracki
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/arkadiuszsieracki-db-optimization
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/db-optimization
What's inside
- Skill name
db-optimization- Description
- PostgreSQL database optimization with EF Core - detect and fix N+1, missing indexes, missing pagination, and incorrect use of AsNoTracking. Use for: slow queries, DB optimization, indexes, N+1 queries, EF Core projections, list pagination.
- License
- Apache-2.0
- Instructions
- 102 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Database optimization
## When to use
- You suspect N+1 (loop with DB queries)
- Slow endpoints that list data
- Missing indexes on filtered/sorted fields
- Loading full entities when only a few fields are needed
- Missing pagination on an endpoint returning a collection
## Analysis procedure
1. Find all loops (`foreach`, `for`) that call `await _db.` inside -> N+1.
2. Find `.ToListAsync()` without pagination (missing `.Skip().Take()`) -> missing pagination.
3. Find `.Include()` when endpoint returns DTO -> replace with `.Select()`.
4. Find readonly queries without `.AsNoTracking()`.
5. Check migrations - whether new fields used in `WHERE`/`ORDER BY` have `HasIndex`.
## Remediation patterns
### N+1 -> Include or projection
```csharp
// [BAD] N+1
var recordings = await _db.Recordings.ToListAsync();
foreach (var r in recordings)
r.Tags = await _db.Tags.Where(t => t.RecordingId == r.Id).ToListAsync();
// [OK] Eager loading
var recordings = await _db.Recordings.Include(r => r.Tags).AsNoTracking().ToListAsync();
// [BEST] Projection (best - only required columns)
var dtos = await _db.Recordings
.AsNoTracking()
.Select(r => new RecordingDto(r.Id, r.Name, r.Tags.Select(t => t.Name)))
.ToListAsync();
```
### Mandatory pagination
```csharp
// [BAD] Missing pagination
var all = await _db.Recordings.ToListAsync();
// [OK]
var page = await _db.Recordings
.AsNoTracking()
.Where(r => r.UserId == userId)
.OrderBy(r => r.CreatedAt)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.Select(r => new RecordingDto(...))
.ToListAsync(ct);
```
### AsNoTracking for readonly
```csharp
// [OK] Always for queries that do not modify entities
var dto = await _db.Recordings
.AsNoTracking()
.FirstOrDefaultAsync(r => r.Id == id, ct);
```
### Indexes in migration
```csharp
// In entity configuration (OnModelCreating / IEntityTypeConfiguration)
builder.HasIndex(r => r.CreatedAt); // ORDER BY
builder.HasIndex(r => new { r.UserId, r.Status }); // composite WHERE
builder.HasIndex(r => r.Name).HasMethod("gin"); // PostgreSQL full-text (optional)
```
### AnyAsync instead of Count > 0
```csharp
// [BAD] Loads COUNT(*)
if (await _db.Recordings.CountAsync(r => r.Id == id) > 0)
// [OK]
if (await _db.Recordings.AnyAsync(r => r.Id == id, ct))
```
## When to add an index
| Situation | Action |
| --------------------------------- | --------------------------------- |
| Field in `.Where()` on large table | `HasIndex(r => r.Field)` |
| Field in `.OrderBy()` | `HasIndex(r => r.Field)` |
| Combination of fields in WHERE | `HasIndex(r => new { r.A, r.B })` |
| FK - verify EF did not skip it | Verify in migration |
## Checklist
- [ ] No loops with DB queries (N+1)
- [ ] Readonly queries use `.AsNoTracking()`
- [ ] Lists have pagination (`.Skip().Take()`)
- [ ] New filtered/sorted fields have index in migration
- [ ] `.Select()` used instead of `.Include()` when endpoint returns DTO
- [ ] `AnyAsync` instead of `Count() > 0`From ArkadiuszSieracki/mastermind-agentic-sdlc-vscode-copilot, Apache-2.0.
More from ArkadiuszSieracki/mastermind-agentic-sdlc-vscode-copilot
- 0.409score
preflight-profile-setup
ArkadiuszSieracki
Interactive bootstrap skill for preflight profiles.
SkillDFreshness: DClaude Code +9 - 0.409score
project-standards-capture
ArkadiuszSieracki
Interactive bootstrap skill for project-specific standards.
SkillDFreshness: DClaude Code +9 - 0.409score
graph-bootstrap-init
ArkadiuszSieracki
Bootstrap skill for graph initialization and refresh.
SkillDFreshness: DClaude Code +9 - 0.409score
groomer-roster-setup
ArkadiuszSieracki
Interactive bootstrap skill for building a project-specific grooming roster.
SkillDFreshness: DClaude Code +9 - 0.409score
repo-discovery-init
ArkadiuszSieracki
Bootstrap skill for repository discovery.
SkillDFreshness: DClaude Code +9 - 0.409score
powershell-strict-mode
ArkadiuszSieracki
Rules for writing reliable PowerShell with Set-StrictMode -Version Latest: mandatory @(), avoiding .Count on unknown type, safe null comparisons, variable…
SkillDFreshness: DClaude Code +9 - 0.406score
agent-capability-routing
ArkadiuszSieracki
Detect missing capabilities and route to a subagent with proper access.
SkillDFreshness: DClaude Code +9 - 0.406score
powershell-executor
ArkadiuszSieracki
Runner-first for PowerShell: every instruction is executed via .github/agents/invoke-isolated-powershell.ps1 (Mode detached by default), with…
SkillDFreshness: DClaude Code +9 - 0.406score
copilot-premium-usage-capture
ArkadiuszSieracki
Capture and normalize premium usage data from the Copilot Pro panel.
SkillDFreshness: DClaude Code +9 - 0.406score
rag-anti-hallucination-workflow
ArkadiuszSieracki
Practical anti-hallucination workflow for RAG: deterministic vs retrieval, query_type/workflow_phase routing, top-k/scoring, grounding/freshness/waste…
SkillDFreshness: DClaude Code +9 - 0.406score
rag-domain-integrity-gate
ArkadiuszSieracki
Fail-fast gate and domain integrity repair in the RAG graph.
SkillDFreshness: DClaude Code +9 - 0.406score
react-performance
ArkadiuszSieracki
React performance optimization - memoization, list virtualization, lazy loading, bundle size.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Apr 23, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ArkadiuszSieracki
- 0.409score
preflight-profile-setup
ArkadiuszSieracki
Interactive bootstrap skill for preflight profiles.
SkillDFreshness: DClaude Code +9 - 0.409score
project-standards-capture
ArkadiuszSieracki
Interactive bootstrap skill for project-specific standards.
SkillDFreshness: DClaude Code +9 - 0.409score
groomer-roster-setup
ArkadiuszSieracki
Interactive bootstrap skill for building a project-specific grooming roster.
SkillDFreshness: DClaude Code +9 - 0.409score
powershell-strict-mode
ArkadiuszSieracki
Rules for writing reliable PowerShell with Set-StrictMode -Version Latest: mandatory @(), avoiding .Count on unknown type, safe null comparisons, variable…
SkillDFreshness: DClaude Code +9 - 0.409score
graph-bootstrap-init
ArkadiuszSieracki
Bootstrap skill for graph initialization and refresh.
SkillDFreshness: DClaude Code +9 - 0.409score
repo-discovery-init
ArkadiuszSieracki
Bootstrap skill for repository discovery.
SkillDFreshness: DClaude Code +9
Cite this page
db-optimization skill. Agent Mart. https://agentmart.dev/skills/arkadiuszsieracki-db-optimization (last updated 2026-10-24)