返回 Skill 列表
extension
分类: 开发与工程无需 API Key

ln-812-query-optimizer

修复N+1查询、冗余获取、过度获取,并通过保留/丢弃验证

person作者: jakexiaohubgithub

Paths: File paths (shared/, references/, ../ln-*) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.

ln-812-query-optimizer

Type: L3 Worker Category: 8XX Optimization Parent: ln-810-performance-optimization-coordinator

Fixes query efficiency issues found by ln-651-query-efficiency-auditor. Each fix verified via tests with keep/discard pattern. Metric: query count reduction (not runtime benchmark).


Overview

| Aspect | Details | |--------|---------| | Input | Audit findings from docs/project/persistence_audit.md (ln-651 section) OR target file | | Output | Optimized queries, verification report | | Companion | ln-651-query-efficiency-auditor (finds issues) → ln-812 (fixes them) |


Workflow

Phases: Pre-flight → Load Findings → Prioritize → Fix Loop → Report


Phase 0: Pre-flight Checks

| Check | Required | Action if Missing | |-------|----------|-------------------| | Audit findings OR target file | Yes | Block optimization | | Test infrastructure | Yes | Block (need tests for verification) | | Git clean state | Yes | Block (need clean baseline for revert) |

MANDATORY READ: Load shared/references/ci_tool_detection.md — use Test Frameworks section for test detection.

Worktree & Branch Isolation

MANDATORY READ: Load shared/references/git_worktree_fallback.md — use ln-812 row.


Phase 1: Load Findings

From Audit Report

Read docs/project/persistence_audit.md, extract ln-651 findings:

| Finding Type | Optimization | |--------------|-------------| | N+1 query | Batch loading / eager loading / .Include() / prefetch_related | | Redundant fetch | Pass object instead of ID, cache result | | Over-fetching | Select specific fields / projection / .Select() | | Missing index hint | Add index annotation / migration | | Unbounded query | Add .Take() / LIMIT / pagination |

From Target File

If no audit report: scan target file for query patterns matching the table above.


Phase 2: Prioritize Fixes

| Priority | Criteria | |----------|----------| | 1 (highest) | N+1 in hot path (called per request) | | 2 | Redundant fetches (same entity loaded multiple times) | | 3 | Over-fetching (SELECT * where few columns needed) | | 4 | Missing pagination on user-facing endpoints |


Phase 3: Fix Loop (Keep/Discard)

Per-Fix Cycle

FOR each finding (F1..FN):
  1. APPLY: Edit query code (surgical change)
  2. VERIFY: Run tests
     IF tests FAIL → DISCARD (revert) → next finding
  3. VERIFY: Tests PASS → KEEP
  4. LOG: Record fix for report

Keep/Discard Decision

| Condition | Decision | |-----------|----------| | No tests cover affected file/function | SKIP finding — log as "uncovered, skipped" | | Tests pass | KEEP | | Tests fail | DISCARD + log failure reason | | Fix introduces new N+1 | DISCARD |

Note: No benchmark needed — query optimization metric is correctness (tests pass) + structural improvement (fewer queries). The audit already identified the inefficiency.


Phase 4: Report Results

Report Schema

| Field | Description | |-------|-------------| | source | Audit report path or target file | | findings_total | Total findings from audit | | fixes_applied | Successfully kept fixes | | fixes_discarded | Failed fixes with reasons | | fix_details[] | Per-fix: finding type, file, before/after description |


Configuration

Options:
  # Source
  audit_report: "docs/project/persistence_audit.md"
  target_file: ""               # Alternative to audit report

  # Verification
  run_tests: true

  # Scope
  fix_types:                    # Filter which types to fix
    - n_plus_one
    - redundant_fetch
    - over_fetching
    - unbounded_query

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | No audit findings | ln-651 not run or no issues | Report "no findings to optimize" | | ORM-specific syntax | Unknown ORM | Query Context7/Ref for ORM docs | | Migration needed | Index addition requires migration | Log as manual step, skip |


References

  • ../ln-651-query-efficiency-auditor/SKILL.md (companion: finds issues)
  • shared/references/ci_tool_detection.md (test detection)

Definition of Done

  • Findings loaded from audit report or target file scan
  • Fixes prioritized (N+1 first, then redundant, over-fetch, unbounded)
  • Each fix applied with keep/discard: tests pass → keep, tests fail → discard
  • No new query inefficiencies introduced by fixes
  • Report returned with findings total, fixes applied, fixes discarded

Version: 1.0.0 Last Updated: 2026-03-08