aigroup-workflow 2.2.1 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +5 -5
- package/package.json +40 -39
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +195 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,265 +1,265 @@
|
|
|
1
|
-
# Performance Optimization
|
|
2
|
-
|
|
3
|
-
## EXPLAIN ANALYZE Fundamentals
|
|
4
|
-
|
|
5
|
-
```sql
|
|
6
|
-
-- Basic EXPLAIN ANALYZE
|
|
7
|
-
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
|
|
8
|
-
SELECT u.id, u.name, COUNT(o.id) as order_count
|
|
9
|
-
FROM users u
|
|
10
|
-
LEFT JOIN orders o ON u.id = o.user_id
|
|
11
|
-
WHERE u.created_at > '2024-01-01'
|
|
12
|
-
GROUP BY u.id, u.name;
|
|
13
|
-
|
|
14
|
-
-- Key metrics to watch:
|
|
15
|
-
-- Planning Time: Time spent creating query plan
|
|
16
|
-
-- Execution Time: Actual query execution time
|
|
17
|
-
-- Shared Hit Blocks: Data found in cache (good)
|
|
18
|
-
-- Shared Read Blocks: Data read from disk (slow)
|
|
19
|
-
-- Rows: Estimated vs actual row counts
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Reading EXPLAIN Output
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
Seq Scan on users (cost=0.00..1234.56 rows=10000 width=32)
|
|
26
|
-
^^^^^^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^
|
|
27
|
-
startup..total cost estimate row width
|
|
28
|
-
|
|
29
|
-
Actual time: 0.123..45.678 rows=9876 loops=1
|
|
30
|
-
^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^
|
|
31
|
-
first..last row actual iterations
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**Node types (fastest to slowest):**
|
|
35
|
-
- Index Only Scan - Best, data from index only
|
|
36
|
-
- Index Scan - Good, uses index + heap lookup
|
|
37
|
-
- Bitmap Index Scan - Good for multiple conditions
|
|
38
|
-
- Seq Scan - Table scan, OK for small tables
|
|
39
|
-
- Seq Scan on large table - Problem, needs index
|
|
40
|
-
|
|
41
|
-
## Index Strategies
|
|
42
|
-
|
|
43
|
-
### B-tree Indexes (Default)
|
|
44
|
-
|
|
45
|
-
```sql
|
|
46
|
-
-- Single column index
|
|
47
|
-
CREATE INDEX idx_users_email ON users(email);
|
|
48
|
-
|
|
49
|
-
-- Multi-column index (order matters!)
|
|
50
|
-
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);
|
|
51
|
-
-- Good for: WHERE user_id = X ORDER BY created_at DESC
|
|
52
|
-
-- Good for: WHERE user_id = X AND created_at > Y
|
|
53
|
-
-- Bad for: WHERE created_at > Y (doesn't use index)
|
|
54
|
-
|
|
55
|
-
-- Partial index (smaller, faster)
|
|
56
|
-
CREATE INDEX idx_active_users ON users(email) WHERE active = true;
|
|
57
|
-
|
|
58
|
-
-- Expression index
|
|
59
|
-
CREATE INDEX idx_users_lower_email ON users(LOWER(email));
|
|
60
|
-
-- Enables: WHERE LOWER(email) = 'user@example.com'
|
|
61
|
-
|
|
62
|
-
-- Covering index (includes extra columns)
|
|
63
|
-
CREATE INDEX idx_orders_covering ON orders(user_id) INCLUDE (total, created_at);
|
|
64
|
-
-- Enables Index Only Scan
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### GIN Indexes (JSONB, arrays, full-text)
|
|
68
|
-
|
|
69
|
-
```sql
|
|
70
|
-
-- JSONB containment
|
|
71
|
-
CREATE INDEX idx_data_gin ON documents USING GIN(data);
|
|
72
|
-
-- Enables: WHERE data @> '{"status": "active"}'
|
|
73
|
-
|
|
74
|
-
-- JSONB specific paths
|
|
75
|
-
CREATE INDEX idx_data_status ON documents USING GIN((data -> 'status'));
|
|
76
|
-
|
|
77
|
-
-- Array operations
|
|
78
|
-
CREATE INDEX idx_tags_gin ON posts USING GIN(tags);
|
|
79
|
-
-- Enables: WHERE tags @> ARRAY['postgresql', 'performance']
|
|
80
|
-
|
|
81
|
-
-- Full-text search
|
|
82
|
-
CREATE INDEX idx_content_fts ON articles USING GIN(to_tsvector('english', content));
|
|
83
|
-
-- Enables: WHERE to_tsvector('english', content) @@ to_tsquery('postgresql & performance')
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### GiST Indexes (Spatial, ranges, nearest neighbor)
|
|
87
|
-
|
|
88
|
-
```sql
|
|
89
|
-
-- PostGIS spatial index
|
|
90
|
-
CREATE INDEX idx_locations_geom ON locations USING GIST(geom);
|
|
91
|
-
-- Enables: WHERE ST_DWithin(geom, point, 1000)
|
|
92
|
-
|
|
93
|
-
-- Range types
|
|
94
|
-
CREATE INDEX idx_bookings_range ON bookings USING GIST(during);
|
|
95
|
-
-- Enables: WHERE during && '[2024-01-01, 2024-01-31]'::daterange
|
|
96
|
-
|
|
97
|
-
-- Nearest neighbor (KNN)
|
|
98
|
-
CREATE INDEX idx_locations_gist ON locations USING GIST(coordinates);
|
|
99
|
-
-- Enables: ORDER BY coordinates <-> point('0,0') LIMIT 10
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### BRIN Indexes (Large, naturally ordered tables)
|
|
103
|
-
|
|
104
|
-
```sql
|
|
105
|
-
-- Time-series data (insert-only, sorted by time)
|
|
106
|
-
CREATE INDEX idx_metrics_time_brin ON metrics USING BRIN(timestamp);
|
|
107
|
-
-- Very small index, good for WHERE timestamp > NOW() - INTERVAL '1 day'
|
|
108
|
-
|
|
109
|
-
-- Works well with:
|
|
110
|
-
-- - Log tables
|
|
111
|
-
-- - Time-series metrics
|
|
112
|
-
-- - Append-only tables with natural order
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Statistics and Planner
|
|
116
|
-
|
|
117
|
-
```sql
|
|
118
|
-
-- Update statistics (do after bulk changes)
|
|
119
|
-
ANALYZE users;
|
|
120
|
-
ANALYZE; -- All tables
|
|
121
|
-
|
|
122
|
-
-- Check statistics freshness
|
|
123
|
-
SELECT schemaname, tablename, last_analyze, last_autoanalyze
|
|
124
|
-
FROM pg_stat_user_tables
|
|
125
|
-
WHERE schemaname = 'public';
|
|
126
|
-
|
|
127
|
-
-- Increase statistics target for high-cardinality columns
|
|
128
|
-
ALTER TABLE users ALTER COLUMN email SET STATISTICS 1000;
|
|
129
|
-
-- Default is 100, increase for better selectivity estimates
|
|
130
|
-
|
|
131
|
-
-- View column statistics
|
|
132
|
-
SELECT * FROM pg_stats WHERE tablename = 'users' AND attname = 'email';
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Query Optimization Patterns
|
|
136
|
-
|
|
137
|
-
### Problem: Sequential scan on large table
|
|
138
|
-
|
|
139
|
-
```sql
|
|
140
|
-
-- Bad: Full table scan
|
|
141
|
-
SELECT * FROM orders WHERE user_id = 123;
|
|
142
|
-
-- Solution: Add index
|
|
143
|
-
CREATE INDEX idx_orders_user ON orders(user_id);
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Problem: Index not used
|
|
147
|
-
|
|
148
|
-
```sql
|
|
149
|
-
-- Bad: Function prevents index usage
|
|
150
|
-
SELECT * FROM users WHERE LOWER(email) = 'user@example.com';
|
|
151
|
-
-- Solution: Expression index
|
|
152
|
-
CREATE INDEX idx_users_email_lower ON users(LOWER(email));
|
|
153
|
-
|
|
154
|
-
-- Bad: Implicit type conversion
|
|
155
|
-
SELECT * FROM users WHERE id = '123'; -- id is integer
|
|
156
|
-
-- Solution: Use correct type
|
|
157
|
-
SELECT * FROM users WHERE id = 123;
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Problem: Large JOIN inefficiency
|
|
161
|
-
|
|
162
|
-
```sql
|
|
163
|
-
-- Bad: Nested loop on large tables
|
|
164
|
-
EXPLAIN ANALYZE
|
|
165
|
-
SELECT * FROM orders o JOIN users u ON o.user_id = u.id;
|
|
166
|
-
|
|
167
|
-
-- Solutions:
|
|
168
|
-
-- 1. Ensure indexes exist on join columns
|
|
169
|
-
CREATE INDEX idx_orders_user ON orders(user_id);
|
|
170
|
-
-- 2. Update statistics
|
|
171
|
-
ANALYZE orders, users;
|
|
172
|
-
-- 3. Increase work_mem if hash join would be better
|
|
173
|
-
SET work_mem = '256MB';
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### Problem: COUNT(*) slow
|
|
177
|
-
|
|
178
|
-
```sql
|
|
179
|
-
-- Bad: Full table scan
|
|
180
|
-
SELECT COUNT(*) FROM orders WHERE status = 'pending';
|
|
181
|
-
|
|
182
|
-
-- Solutions:
|
|
183
|
-
-- 1. Partial index
|
|
184
|
-
CREATE INDEX idx_orders_pending ON orders(id) WHERE status = 'pending';
|
|
185
|
-
|
|
186
|
-
-- 2. Approximate count for large tables
|
|
187
|
-
SELECT reltuples::bigint FROM pg_class WHERE relname = 'orders';
|
|
188
|
-
|
|
189
|
-
-- 3. Materialized count for reports
|
|
190
|
-
CREATE MATERIALIZED VIEW order_counts AS
|
|
191
|
-
SELECT status, COUNT(*) FROM orders GROUP BY status;
|
|
192
|
-
CREATE UNIQUE INDEX ON order_counts(status);
|
|
193
|
-
REFRESH MATERIALIZED VIEW CONCURRENTLY order_counts;
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## Connection Pooling
|
|
197
|
-
|
|
198
|
-
```sql
|
|
199
|
-
-- Check active connections
|
|
200
|
-
SELECT count(*) FROM pg_stat_activity WHERE state = 'active';
|
|
201
|
-
|
|
202
|
-
-- Connection limit reached? Use pgBouncer
|
|
203
|
-
-- pgbouncer.ini:
|
|
204
|
-
-- [databases]
|
|
205
|
-
-- mydb = host=localhost port=5432 dbname=mydb
|
|
206
|
-
-- [pgbouncer]
|
|
207
|
-
-- pool_mode = transaction
|
|
208
|
-
-- max_client_conn = 1000
|
|
209
|
-
-- default_pool_size = 25
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Configuration Tuning
|
|
213
|
-
|
|
214
|
-
```sql
|
|
215
|
-
-- Memory settings (for 16GB RAM server)
|
|
216
|
-
shared_buffers = 4GB -- 25% of RAM
|
|
217
|
-
effective_cache_size = 12GB -- 75% of RAM
|
|
218
|
-
work_mem = 64MB -- Per operation
|
|
219
|
-
maintenance_work_mem = 1GB -- For VACUUM, CREATE INDEX
|
|
220
|
-
|
|
221
|
-
-- Checkpoint tuning
|
|
222
|
-
checkpoint_completion_target = 0.9
|
|
223
|
-
wal_buffers = 16MB
|
|
224
|
-
checkpoint_timeout = 10min
|
|
225
|
-
|
|
226
|
-
-- Query planner
|
|
227
|
-
random_page_cost = 1.1 -- Lower for SSD (default 4.0)
|
|
228
|
-
effective_io_concurrency = 200 -- Higher for SSD
|
|
229
|
-
|
|
230
|
-
-- Parallelism (Postgres 10+)
|
|
231
|
-
max_parallel_workers_per_gather = 4
|
|
232
|
-
max_parallel_workers = 8
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
## Performance Monitoring
|
|
236
|
-
|
|
237
|
-
```sql
|
|
238
|
-
-- Slow queries (requires pg_stat_statements)
|
|
239
|
-
SELECT
|
|
240
|
-
query,
|
|
241
|
-
calls,
|
|
242
|
-
mean_exec_time,
|
|
243
|
-
max_exec_time,
|
|
244
|
-
stddev_exec_time
|
|
245
|
-
FROM pg_stat_statements
|
|
246
|
-
ORDER BY mean_exec_time DESC
|
|
247
|
-
LIMIT 20;
|
|
248
|
-
|
|
249
|
-
-- Cache hit ratio (should be > 99%)
|
|
250
|
-
SELECT
|
|
251
|
-
sum(blks_hit) * 100.0 / sum(blks_hit + blks_read) as cache_hit_ratio
|
|
252
|
-
FROM pg_stat_database;
|
|
253
|
-
|
|
254
|
-
-- Index usage
|
|
255
|
-
SELECT
|
|
256
|
-
schemaname,
|
|
257
|
-
tablename,
|
|
258
|
-
indexname,
|
|
259
|
-
idx_scan,
|
|
260
|
-
idx_tup_read,
|
|
261
|
-
idx_tup_fetch
|
|
262
|
-
FROM pg_stat_user_indexes
|
|
263
|
-
WHERE idx_scan = 0
|
|
264
|
-
AND indexrelname NOT LIKE '%pkey'; -- Unused indexes
|
|
265
|
-
```
|
|
1
|
+
# Performance Optimization
|
|
2
|
+
|
|
3
|
+
## EXPLAIN ANALYZE Fundamentals
|
|
4
|
+
|
|
5
|
+
```sql
|
|
6
|
+
-- Basic EXPLAIN ANALYZE
|
|
7
|
+
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
|
|
8
|
+
SELECT u.id, u.name, COUNT(o.id) as order_count
|
|
9
|
+
FROM users u
|
|
10
|
+
LEFT JOIN orders o ON u.id = o.user_id
|
|
11
|
+
WHERE u.created_at > '2024-01-01'
|
|
12
|
+
GROUP BY u.id, u.name;
|
|
13
|
+
|
|
14
|
+
-- Key metrics to watch:
|
|
15
|
+
-- Planning Time: Time spent creating query plan
|
|
16
|
+
-- Execution Time: Actual query execution time
|
|
17
|
+
-- Shared Hit Blocks: Data found in cache (good)
|
|
18
|
+
-- Shared Read Blocks: Data read from disk (slow)
|
|
19
|
+
-- Rows: Estimated vs actual row counts
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Reading EXPLAIN Output
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Seq Scan on users (cost=0.00..1234.56 rows=10000 width=32)
|
|
26
|
+
^^^^^^^^^^^^^^^^^^^^ ^^^^^^ ^^^^^^^^
|
|
27
|
+
startup..total cost estimate row width
|
|
28
|
+
|
|
29
|
+
Actual time: 0.123..45.678 rows=9876 loops=1
|
|
30
|
+
^^^^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^
|
|
31
|
+
first..last row actual iterations
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Node types (fastest to slowest):**
|
|
35
|
+
- Index Only Scan - Best, data from index only
|
|
36
|
+
- Index Scan - Good, uses index + heap lookup
|
|
37
|
+
- Bitmap Index Scan - Good for multiple conditions
|
|
38
|
+
- Seq Scan - Table scan, OK for small tables
|
|
39
|
+
- Seq Scan on large table - Problem, needs index
|
|
40
|
+
|
|
41
|
+
## Index Strategies
|
|
42
|
+
|
|
43
|
+
### B-tree Indexes (Default)
|
|
44
|
+
|
|
45
|
+
```sql
|
|
46
|
+
-- Single column index
|
|
47
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
48
|
+
|
|
49
|
+
-- Multi-column index (order matters!)
|
|
50
|
+
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);
|
|
51
|
+
-- Good for: WHERE user_id = X ORDER BY created_at DESC
|
|
52
|
+
-- Good for: WHERE user_id = X AND created_at > Y
|
|
53
|
+
-- Bad for: WHERE created_at > Y (doesn't use index)
|
|
54
|
+
|
|
55
|
+
-- Partial index (smaller, faster)
|
|
56
|
+
CREATE INDEX idx_active_users ON users(email) WHERE active = true;
|
|
57
|
+
|
|
58
|
+
-- Expression index
|
|
59
|
+
CREATE INDEX idx_users_lower_email ON users(LOWER(email));
|
|
60
|
+
-- Enables: WHERE LOWER(email) = 'user@example.com'
|
|
61
|
+
|
|
62
|
+
-- Covering index (includes extra columns)
|
|
63
|
+
CREATE INDEX idx_orders_covering ON orders(user_id) INCLUDE (total, created_at);
|
|
64
|
+
-- Enables Index Only Scan
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### GIN Indexes (JSONB, arrays, full-text)
|
|
68
|
+
|
|
69
|
+
```sql
|
|
70
|
+
-- JSONB containment
|
|
71
|
+
CREATE INDEX idx_data_gin ON documents USING GIN(data);
|
|
72
|
+
-- Enables: WHERE data @> '{"status": "active"}'
|
|
73
|
+
|
|
74
|
+
-- JSONB specific paths
|
|
75
|
+
CREATE INDEX idx_data_status ON documents USING GIN((data -> 'status'));
|
|
76
|
+
|
|
77
|
+
-- Array operations
|
|
78
|
+
CREATE INDEX idx_tags_gin ON posts USING GIN(tags);
|
|
79
|
+
-- Enables: WHERE tags @> ARRAY['postgresql', 'performance']
|
|
80
|
+
|
|
81
|
+
-- Full-text search
|
|
82
|
+
CREATE INDEX idx_content_fts ON articles USING GIN(to_tsvector('english', content));
|
|
83
|
+
-- Enables: WHERE to_tsvector('english', content) @@ to_tsquery('postgresql & performance')
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### GiST Indexes (Spatial, ranges, nearest neighbor)
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- PostGIS spatial index
|
|
90
|
+
CREATE INDEX idx_locations_geom ON locations USING GIST(geom);
|
|
91
|
+
-- Enables: WHERE ST_DWithin(geom, point, 1000)
|
|
92
|
+
|
|
93
|
+
-- Range types
|
|
94
|
+
CREATE INDEX idx_bookings_range ON bookings USING GIST(during);
|
|
95
|
+
-- Enables: WHERE during && '[2024-01-01, 2024-01-31]'::daterange
|
|
96
|
+
|
|
97
|
+
-- Nearest neighbor (KNN)
|
|
98
|
+
CREATE INDEX idx_locations_gist ON locations USING GIST(coordinates);
|
|
99
|
+
-- Enables: ORDER BY coordinates <-> point('0,0') LIMIT 10
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### BRIN Indexes (Large, naturally ordered tables)
|
|
103
|
+
|
|
104
|
+
```sql
|
|
105
|
+
-- Time-series data (insert-only, sorted by time)
|
|
106
|
+
CREATE INDEX idx_metrics_time_brin ON metrics USING BRIN(timestamp);
|
|
107
|
+
-- Very small index, good for WHERE timestamp > NOW() - INTERVAL '1 day'
|
|
108
|
+
|
|
109
|
+
-- Works well with:
|
|
110
|
+
-- - Log tables
|
|
111
|
+
-- - Time-series metrics
|
|
112
|
+
-- - Append-only tables with natural order
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Statistics and Planner
|
|
116
|
+
|
|
117
|
+
```sql
|
|
118
|
+
-- Update statistics (do after bulk changes)
|
|
119
|
+
ANALYZE users;
|
|
120
|
+
ANALYZE; -- All tables
|
|
121
|
+
|
|
122
|
+
-- Check statistics freshness
|
|
123
|
+
SELECT schemaname, tablename, last_analyze, last_autoanalyze
|
|
124
|
+
FROM pg_stat_user_tables
|
|
125
|
+
WHERE schemaname = 'public';
|
|
126
|
+
|
|
127
|
+
-- Increase statistics target for high-cardinality columns
|
|
128
|
+
ALTER TABLE users ALTER COLUMN email SET STATISTICS 1000;
|
|
129
|
+
-- Default is 100, increase for better selectivity estimates
|
|
130
|
+
|
|
131
|
+
-- View column statistics
|
|
132
|
+
SELECT * FROM pg_stats WHERE tablename = 'users' AND attname = 'email';
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Query Optimization Patterns
|
|
136
|
+
|
|
137
|
+
### Problem: Sequential scan on large table
|
|
138
|
+
|
|
139
|
+
```sql
|
|
140
|
+
-- Bad: Full table scan
|
|
141
|
+
SELECT * FROM orders WHERE user_id = 123;
|
|
142
|
+
-- Solution: Add index
|
|
143
|
+
CREATE INDEX idx_orders_user ON orders(user_id);
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Problem: Index not used
|
|
147
|
+
|
|
148
|
+
```sql
|
|
149
|
+
-- Bad: Function prevents index usage
|
|
150
|
+
SELECT * FROM users WHERE LOWER(email) = 'user@example.com';
|
|
151
|
+
-- Solution: Expression index
|
|
152
|
+
CREATE INDEX idx_users_email_lower ON users(LOWER(email));
|
|
153
|
+
|
|
154
|
+
-- Bad: Implicit type conversion
|
|
155
|
+
SELECT * FROM users WHERE id = '123'; -- id is integer
|
|
156
|
+
-- Solution: Use correct type
|
|
157
|
+
SELECT * FROM users WHERE id = 123;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Problem: Large JOIN inefficiency
|
|
161
|
+
|
|
162
|
+
```sql
|
|
163
|
+
-- Bad: Nested loop on large tables
|
|
164
|
+
EXPLAIN ANALYZE
|
|
165
|
+
SELECT * FROM orders o JOIN users u ON o.user_id = u.id;
|
|
166
|
+
|
|
167
|
+
-- Solutions:
|
|
168
|
+
-- 1. Ensure indexes exist on join columns
|
|
169
|
+
CREATE INDEX idx_orders_user ON orders(user_id);
|
|
170
|
+
-- 2. Update statistics
|
|
171
|
+
ANALYZE orders, users;
|
|
172
|
+
-- 3. Increase work_mem if hash join would be better
|
|
173
|
+
SET work_mem = '256MB';
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Problem: COUNT(*) slow
|
|
177
|
+
|
|
178
|
+
```sql
|
|
179
|
+
-- Bad: Full table scan
|
|
180
|
+
SELECT COUNT(*) FROM orders WHERE status = 'pending';
|
|
181
|
+
|
|
182
|
+
-- Solutions:
|
|
183
|
+
-- 1. Partial index
|
|
184
|
+
CREATE INDEX idx_orders_pending ON orders(id) WHERE status = 'pending';
|
|
185
|
+
|
|
186
|
+
-- 2. Approximate count for large tables
|
|
187
|
+
SELECT reltuples::bigint FROM pg_class WHERE relname = 'orders';
|
|
188
|
+
|
|
189
|
+
-- 3. Materialized count for reports
|
|
190
|
+
CREATE MATERIALIZED VIEW order_counts AS
|
|
191
|
+
SELECT status, COUNT(*) FROM orders GROUP BY status;
|
|
192
|
+
CREATE UNIQUE INDEX ON order_counts(status);
|
|
193
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY order_counts;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Connection Pooling
|
|
197
|
+
|
|
198
|
+
```sql
|
|
199
|
+
-- Check active connections
|
|
200
|
+
SELECT count(*) FROM pg_stat_activity WHERE state = 'active';
|
|
201
|
+
|
|
202
|
+
-- Connection limit reached? Use pgBouncer
|
|
203
|
+
-- pgbouncer.ini:
|
|
204
|
+
-- [databases]
|
|
205
|
+
-- mydb = host=localhost port=5432 dbname=mydb
|
|
206
|
+
-- [pgbouncer]
|
|
207
|
+
-- pool_mode = transaction
|
|
208
|
+
-- max_client_conn = 1000
|
|
209
|
+
-- default_pool_size = 25
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Configuration Tuning
|
|
213
|
+
|
|
214
|
+
```sql
|
|
215
|
+
-- Memory settings (for 16GB RAM server)
|
|
216
|
+
shared_buffers = 4GB -- 25% of RAM
|
|
217
|
+
effective_cache_size = 12GB -- 75% of RAM
|
|
218
|
+
work_mem = 64MB -- Per operation
|
|
219
|
+
maintenance_work_mem = 1GB -- For VACUUM, CREATE INDEX
|
|
220
|
+
|
|
221
|
+
-- Checkpoint tuning
|
|
222
|
+
checkpoint_completion_target = 0.9
|
|
223
|
+
wal_buffers = 16MB
|
|
224
|
+
checkpoint_timeout = 10min
|
|
225
|
+
|
|
226
|
+
-- Query planner
|
|
227
|
+
random_page_cost = 1.1 -- Lower for SSD (default 4.0)
|
|
228
|
+
effective_io_concurrency = 200 -- Higher for SSD
|
|
229
|
+
|
|
230
|
+
-- Parallelism (Postgres 10+)
|
|
231
|
+
max_parallel_workers_per_gather = 4
|
|
232
|
+
max_parallel_workers = 8
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Performance Monitoring
|
|
236
|
+
|
|
237
|
+
```sql
|
|
238
|
+
-- Slow queries (requires pg_stat_statements)
|
|
239
|
+
SELECT
|
|
240
|
+
query,
|
|
241
|
+
calls,
|
|
242
|
+
mean_exec_time,
|
|
243
|
+
max_exec_time,
|
|
244
|
+
stddev_exec_time
|
|
245
|
+
FROM pg_stat_statements
|
|
246
|
+
ORDER BY mean_exec_time DESC
|
|
247
|
+
LIMIT 20;
|
|
248
|
+
|
|
249
|
+
-- Cache hit ratio (should be > 99%)
|
|
250
|
+
SELECT
|
|
251
|
+
sum(blks_hit) * 100.0 / sum(blks_hit + blks_read) as cache_hit_ratio
|
|
252
|
+
FROM pg_stat_database;
|
|
253
|
+
|
|
254
|
+
-- Index usage
|
|
255
|
+
SELECT
|
|
256
|
+
schemaname,
|
|
257
|
+
tablename,
|
|
258
|
+
indexname,
|
|
259
|
+
idx_scan,
|
|
260
|
+
idx_tup_read,
|
|
261
|
+
idx_tup_fetch
|
|
262
|
+
FROM pg_stat_user_indexes
|
|
263
|
+
WHERE idx_scan = 0
|
|
264
|
+
AND indexrelname NOT LIKE '%pkey'; -- Unused indexes
|
|
265
|
+
```
|