@mytechtoday/augment-extensions 0.2.0 → 0.5.0
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/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
- package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
- package/augment-extensions/workflows/beads-integration/README.md +143 -0
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
- package/augment-extensions/workflows/beads-integration/module.json +75 -0
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/writing-standards/screenplay/README.md +300 -0
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +168 -10
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts +19 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +478 -63
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/types/gui.d.ts +62 -0
- package/cli/dist/types/gui.d.ts.map +1 -0
- package/cli/dist/types/gui.js +30 -0
- package/cli/dist/types/gui.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/gui-helpers.d.ts +23 -0
- package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
- package/cli/dist/utils/gui-helpers.js +159 -0
- package/cli/dist/utils/gui-helpers.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +232 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +900 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +559 -105
- package/package.json +17 -6
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
# Relational Database Indexing
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document covers relational database indexing strategies, including index types (B-tree, hash, GiST, GIN), when to create indexes, composite indexes, covering indexes, partial indexes, index maintenance, query plan analysis, and database-specific indexing features.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Index Fundamentals
|
|
10
|
+
|
|
11
|
+
### What is an Index?
|
|
12
|
+
|
|
13
|
+
**Definition**: A data structure that improves the speed of data retrieval operations
|
|
14
|
+
|
|
15
|
+
**Analogy**: Like an index in a book - helps you find information quickly without reading every page
|
|
16
|
+
|
|
17
|
+
**Trade-offs:**
|
|
18
|
+
- ✅ **Faster reads**: Queries using indexed columns are faster
|
|
19
|
+
- ❌ **Slower writes**: INSERT, UPDATE, DELETE operations are slower
|
|
20
|
+
- ❌ **Storage overhead**: Indexes consume disk space
|
|
21
|
+
- ❌ **Maintenance overhead**: Indexes need to be updated
|
|
22
|
+
|
|
23
|
+
### When to Create Indexes
|
|
24
|
+
|
|
25
|
+
**Create indexes for:**
|
|
26
|
+
- ✅ Primary keys (automatic in most databases)
|
|
27
|
+
- ✅ Foreign keys
|
|
28
|
+
- ✅ Columns used in WHERE clauses
|
|
29
|
+
- ✅ Columns used in JOIN conditions
|
|
30
|
+
- ✅ Columns used in ORDER BY clauses
|
|
31
|
+
- ✅ Columns used in GROUP BY clauses
|
|
32
|
+
- ✅ Columns with high cardinality (many unique values)
|
|
33
|
+
|
|
34
|
+
**Avoid indexes for:**
|
|
35
|
+
- ❌ Small tables (< 1000 rows)
|
|
36
|
+
- ❌ Columns with low cardinality (few unique values)
|
|
37
|
+
- ❌ Columns that are frequently updated
|
|
38
|
+
- ❌ Tables with high write-to-read ratio
|
|
39
|
+
- ❌ Columns rarely used in queries
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Index Types
|
|
44
|
+
|
|
45
|
+
### B-Tree Indexes (Default)
|
|
46
|
+
|
|
47
|
+
**Best for:** Equality and range queries
|
|
48
|
+
|
|
49
|
+
**Characteristics:**
|
|
50
|
+
- Default index type in most databases
|
|
51
|
+
- Balanced tree structure
|
|
52
|
+
- Supports <, <=, =, >=, >, BETWEEN, IN
|
|
53
|
+
- Supports ORDER BY
|
|
54
|
+
- Supports prefix matching (LIKE 'prefix%')
|
|
55
|
+
|
|
56
|
+
**Example:**
|
|
57
|
+
```sql
|
|
58
|
+
-- PostgreSQL: Create B-tree index (default)
|
|
59
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
60
|
+
CREATE INDEX idx_orders_created_at ON orders(created_at);
|
|
61
|
+
|
|
62
|
+
-- Queries that benefit from B-tree index
|
|
63
|
+
SELECT * FROM users WHERE email = 'user@example.com';
|
|
64
|
+
SELECT * FROM orders WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';
|
|
65
|
+
SELECT * FROM orders ORDER BY created_at DESC;
|
|
66
|
+
SELECT * FROM users WHERE email LIKE 'user%';
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**When to use:**
|
|
70
|
+
- ✅ Most common use case
|
|
71
|
+
- ✅ Range queries
|
|
72
|
+
- ✅ Sorting
|
|
73
|
+
- ✅ Prefix matching
|
|
74
|
+
|
|
75
|
+
### Hash Indexes
|
|
76
|
+
|
|
77
|
+
**Best for:** Equality comparisons only
|
|
78
|
+
|
|
79
|
+
**Characteristics:**
|
|
80
|
+
- Faster than B-tree for equality comparisons
|
|
81
|
+
- Does NOT support range queries
|
|
82
|
+
- Does NOT support ORDER BY
|
|
83
|
+
- Smaller than B-tree indexes
|
|
84
|
+
|
|
85
|
+
**Example:**
|
|
86
|
+
```sql
|
|
87
|
+
-- PostgreSQL: Create hash index
|
|
88
|
+
CREATE INDEX idx_users_email_hash ON users USING HASH(email);
|
|
89
|
+
|
|
90
|
+
-- Query that benefits from hash index
|
|
91
|
+
SELECT * FROM users WHERE email = 'user@example.com';
|
|
92
|
+
|
|
93
|
+
-- Queries that do NOT benefit from hash index
|
|
94
|
+
SELECT * FROM users WHERE email > 'a@example.com'; -- Range query
|
|
95
|
+
SELECT * FROM users ORDER BY email; -- Sorting
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**When to use:**
|
|
99
|
+
- ✅ Equality comparisons only
|
|
100
|
+
- ✅ High cardinality columns
|
|
101
|
+
- ❌ Not widely used (B-tree is usually sufficient)
|
|
102
|
+
|
|
103
|
+
### GiST Indexes (Generalized Search Tree)
|
|
104
|
+
|
|
105
|
+
**Best for:** Geometric data, full-text search, custom data types
|
|
106
|
+
|
|
107
|
+
**Characteristics:**
|
|
108
|
+
- Supports complex data types
|
|
109
|
+
- Extensible (custom operators)
|
|
110
|
+
- Used by PostGIS for geospatial data
|
|
111
|
+
|
|
112
|
+
**Example:**
|
|
113
|
+
```sql
|
|
114
|
+
-- PostgreSQL: GiST index for geometric data
|
|
115
|
+
CREATE INDEX idx_locations_point ON locations USING GIST(point);
|
|
116
|
+
|
|
117
|
+
-- Query geometric data
|
|
118
|
+
SELECT * FROM locations
|
|
119
|
+
WHERE point <-> '(0,0)'::point < 10; -- Within 10 units of origin
|
|
120
|
+
|
|
121
|
+
-- GiST index for full-text search
|
|
122
|
+
CREATE INDEX idx_articles_content_gist ON articles USING GIST(to_tsvector('english', content));
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**When to use:**
|
|
126
|
+
- ✅ Geospatial queries (PostGIS)
|
|
127
|
+
- ✅ Full-text search
|
|
128
|
+
- ✅ Range types
|
|
129
|
+
- ✅ Custom data types
|
|
130
|
+
|
|
131
|
+
### GIN Indexes (Generalized Inverted Index)
|
|
132
|
+
|
|
133
|
+
**Best for:** Array, JSONB, full-text search
|
|
134
|
+
|
|
135
|
+
**Characteristics:**
|
|
136
|
+
- Optimized for multi-value columns
|
|
137
|
+
- Larger than B-tree indexes
|
|
138
|
+
- Slower writes, faster reads
|
|
139
|
+
- Ideal for JSONB and array queries
|
|
140
|
+
|
|
141
|
+
**Example:**
|
|
142
|
+
```sql
|
|
143
|
+
-- PostgreSQL: GIN index for JSONB
|
|
144
|
+
CREATE INDEX idx_products_attributes ON products USING GIN(attributes);
|
|
145
|
+
|
|
146
|
+
-- Query JSONB
|
|
147
|
+
SELECT * FROM products WHERE attributes @> '{"brand": "Dell"}';
|
|
148
|
+
|
|
149
|
+
-- GIN index for arrays
|
|
150
|
+
CREATE INDEX idx_posts_tags ON posts USING GIN(tags);
|
|
151
|
+
|
|
152
|
+
-- Query arrays
|
|
153
|
+
SELECT * FROM posts WHERE tags @> ARRAY['postgresql'];
|
|
154
|
+
|
|
155
|
+
-- GIN index for full-text search
|
|
156
|
+
CREATE INDEX idx_articles_content_gin ON articles USING GIN(to_tsvector('english', content));
|
|
157
|
+
|
|
158
|
+
-- Full-text search
|
|
159
|
+
SELECT * FROM articles
|
|
160
|
+
WHERE to_tsvector('english', content) @@ to_tsquery('english', 'database & optimization');
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**When to use:**
|
|
164
|
+
- ✅ JSONB queries
|
|
165
|
+
- ✅ Array queries
|
|
166
|
+
- ✅ Full-text search
|
|
167
|
+
- ✅ Multi-value columns
|
|
168
|
+
|
|
169
|
+
### BRIN Indexes (Block Range Index)
|
|
170
|
+
|
|
171
|
+
**Best for:** Very large tables with naturally ordered data
|
|
172
|
+
|
|
173
|
+
**Characteristics:**
|
|
174
|
+
- Extremely small index size
|
|
175
|
+
- Fast index creation
|
|
176
|
+
- Best for time-series data
|
|
177
|
+
- Only effective if data is physically ordered
|
|
178
|
+
|
|
179
|
+
**Example:**
|
|
180
|
+
```sql
|
|
181
|
+
-- PostgreSQL: BRIN index for time-series data
|
|
182
|
+
CREATE INDEX idx_logs_created_at_brin ON logs USING BRIN(created_at);
|
|
183
|
+
|
|
184
|
+
-- Query time-series data
|
|
185
|
+
SELECT * FROM logs WHERE created_at > '2024-01-01';
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**When to use:**
|
|
189
|
+
- ✅ Very large tables (millions of rows)
|
|
190
|
+
- ✅ Time-series data
|
|
191
|
+
- ✅ Naturally ordered data
|
|
192
|
+
- ✅ Range queries on ordered columns
|
|
193
|
+
- ❌ Not for randomly distributed data
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Composite Indexes
|
|
198
|
+
|
|
199
|
+
### Definition
|
|
200
|
+
|
|
201
|
+
**Composite index**: Index on multiple columns
|
|
202
|
+
|
|
203
|
+
**Example:**
|
|
204
|
+
```sql
|
|
205
|
+
-- Create composite index
|
|
206
|
+
CREATE INDEX idx_orders_user_status ON orders(user_id, status);
|
|
207
|
+
|
|
208
|
+
-- Query benefits from composite index
|
|
209
|
+
SELECT * FROM orders
|
|
210
|
+
WHERE user_id = 123 AND status = 'pending';
|
|
211
|
+
|
|
212
|
+
-- Query partially benefits (uses user_id only)
|
|
213
|
+
SELECT * FROM orders WHERE user_id = 123;
|
|
214
|
+
|
|
215
|
+
-- Query does NOT benefit (status is not leftmost column)
|
|
216
|
+
SELECT * FROM orders WHERE status = 'pending';
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Column Order Matters
|
|
220
|
+
|
|
221
|
+
**Rule**: Leftmost prefix rule
|
|
222
|
+
|
|
223
|
+
**Best Practices:**
|
|
224
|
+
- ✅ Put most selective column first
|
|
225
|
+
- ✅ Put columns used in equality comparisons before range comparisons
|
|
226
|
+
- ✅ Consider query patterns
|
|
227
|
+
|
|
228
|
+
**Example:**
|
|
229
|
+
```sql
|
|
230
|
+
-- Good: Most selective column first
|
|
231
|
+
CREATE INDEX idx_orders_user_status_date ON orders(user_id, status, created_at);
|
|
232
|
+
|
|
233
|
+
-- Queries that benefit:
|
|
234
|
+
-- 1. All three columns
|
|
235
|
+
SELECT * FROM orders WHERE user_id = 123 AND status = 'pending' AND created_at > '2024-01-01';
|
|
236
|
+
|
|
237
|
+
-- 2. First two columns
|
|
238
|
+
SELECT * FROM orders WHERE user_id = 123 AND status = 'pending';
|
|
239
|
+
|
|
240
|
+
-- 3. First column only
|
|
241
|
+
SELECT * FROM orders WHERE user_id = 123;
|
|
242
|
+
|
|
243
|
+
-- Queries that do NOT benefit:
|
|
244
|
+
-- 1. Second column only
|
|
245
|
+
SELECT * FROM orders WHERE status = 'pending';
|
|
246
|
+
|
|
247
|
+
-- 2. Third column only
|
|
248
|
+
SELECT * FROM orders WHERE created_at > '2024-01-01';
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### When to Use Composite Indexes
|
|
252
|
+
|
|
253
|
+
**Use composite indexes when:**
|
|
254
|
+
- ✅ Queries filter on multiple columns together
|
|
255
|
+
- ✅ Columns are frequently queried together
|
|
256
|
+
- ✅ Single-column indexes are not selective enough
|
|
257
|
+
|
|
258
|
+
**Example:**
|
|
259
|
+
```sql
|
|
260
|
+
-- Instead of two separate indexes:
|
|
261
|
+
CREATE INDEX idx_orders_user ON orders(user_id);
|
|
262
|
+
CREATE INDEX idx_orders_status ON orders(status);
|
|
263
|
+
|
|
264
|
+
-- Use one composite index:
|
|
265
|
+
CREATE INDEX idx_orders_user_status ON orders(user_id, status);
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Covering Indexes
|
|
271
|
+
|
|
272
|
+
### Definition
|
|
273
|
+
|
|
274
|
+
**Covering index**: Index that includes all columns needed by a query
|
|
275
|
+
|
|
276
|
+
**Benefit**: Query can be satisfied entirely from the index (index-only scan)
|
|
277
|
+
|
|
278
|
+
**Example:**
|
|
279
|
+
```sql
|
|
280
|
+
-- PostgreSQL: Create covering index with INCLUDE
|
|
281
|
+
CREATE INDEX idx_users_email_covering ON users(email) INCLUDE (name, created_at);
|
|
282
|
+
|
|
283
|
+
-- Query uses index-only scan (no table access needed)
|
|
284
|
+
SELECT name, created_at FROM users WHERE email = 'user@example.com';
|
|
285
|
+
|
|
286
|
+
-- EXPLAIN output shows "Index Only Scan"
|
|
287
|
+
EXPLAIN SELECT name, created_at FROM users WHERE email = 'user@example.com';
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**MySQL: Covering index**
|
|
291
|
+
```sql
|
|
292
|
+
-- MySQL: Add columns to index to create covering index
|
|
293
|
+
CREATE INDEX idx_users_email_name_created ON users(email, name, created_at);
|
|
294
|
+
|
|
295
|
+
-- Query uses covering index
|
|
296
|
+
SELECT name, created_at FROM users WHERE email = 'user@example.com';
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**When to use:**
|
|
300
|
+
- ✅ Frequently executed queries
|
|
301
|
+
- ✅ Queries selecting few columns
|
|
302
|
+
- ✅ Performance-critical queries
|
|
303
|
+
- ❌ Don't include too many columns (index bloat)
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Partial Indexes
|
|
308
|
+
|
|
309
|
+
### Definition
|
|
310
|
+
|
|
311
|
+
**Partial index**: Index on subset of rows
|
|
312
|
+
|
|
313
|
+
**Benefit**: Smaller, more efficient index
|
|
314
|
+
|
|
315
|
+
**Example:**
|
|
316
|
+
```sql
|
|
317
|
+
-- PostgreSQL: Create partial index
|
|
318
|
+
CREATE INDEX idx_orders_pending ON orders(created_at)
|
|
319
|
+
WHERE status = 'pending';
|
|
320
|
+
|
|
321
|
+
-- Query benefits from smaller, more efficient index
|
|
322
|
+
SELECT * FROM orders
|
|
323
|
+
WHERE status = 'pending' AND created_at > '2024-01-01';
|
|
324
|
+
|
|
325
|
+
-- Another example: Index only active users
|
|
326
|
+
CREATE INDEX idx_users_active_email ON users(email)
|
|
327
|
+
WHERE deleted_at IS NULL;
|
|
328
|
+
|
|
329
|
+
-- Query benefits
|
|
330
|
+
SELECT * FROM users
|
|
331
|
+
WHERE email = 'user@example.com' AND deleted_at IS NULL;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**When to use:**
|
|
335
|
+
- ✅ Queries frequently filter on specific values
|
|
336
|
+
- ✅ Large tables with subset of active rows
|
|
337
|
+
- ✅ Soft-delete patterns
|
|
338
|
+
- ✅ Status-based filtering
|
|
339
|
+
|
|
340
|
+
**Database support:**
|
|
341
|
+
- ✅ PostgreSQL: Full support
|
|
342
|
+
- ❌ MySQL: No support (use filtered index workaround)
|
|
343
|
+
- ✅ SQL Server: Filtered indexes
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Unique Indexes
|
|
348
|
+
|
|
349
|
+
### Definition
|
|
350
|
+
|
|
351
|
+
**Unique index**: Enforces uniqueness constraint
|
|
352
|
+
|
|
353
|
+
**Example:**
|
|
354
|
+
```sql
|
|
355
|
+
-- Create unique index
|
|
356
|
+
CREATE UNIQUE INDEX idx_users_email_unique ON users(email);
|
|
357
|
+
|
|
358
|
+
-- Composite unique index
|
|
359
|
+
CREATE UNIQUE INDEX idx_user_prefs_unique ON user_preferences(user_id, preference_key);
|
|
360
|
+
|
|
361
|
+
-- Partial unique index (PostgreSQL)
|
|
362
|
+
CREATE UNIQUE INDEX idx_users_username_active ON users(username)
|
|
363
|
+
WHERE deleted_at IS NULL;
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
**When to use:**
|
|
367
|
+
- ✅ Enforce uniqueness constraints
|
|
368
|
+
- ✅ Prevent duplicate data
|
|
369
|
+
- ✅ Faster than CHECK constraint
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Index Maintenance
|
|
374
|
+
|
|
375
|
+
### Analyzing Index Usage
|
|
376
|
+
|
|
377
|
+
**PostgreSQL: Check index usage**
|
|
378
|
+
```sql
|
|
379
|
+
-- Find unused indexes
|
|
380
|
+
SELECT
|
|
381
|
+
schemaname,
|
|
382
|
+
tablename,
|
|
383
|
+
indexname,
|
|
384
|
+
idx_scan,
|
|
385
|
+
idx_tup_read,
|
|
386
|
+
idx_tup_fetch
|
|
387
|
+
FROM pg_stat_user_indexes
|
|
388
|
+
WHERE idx_scan = 0
|
|
389
|
+
AND indexname NOT LIKE 'pg_toast%'
|
|
390
|
+
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
391
|
+
|
|
392
|
+
-- Find index size
|
|
393
|
+
SELECT
|
|
394
|
+
schemaname,
|
|
395
|
+
tablename,
|
|
396
|
+
indexname,
|
|
397
|
+
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size
|
|
398
|
+
FROM pg_stat_user_indexes
|
|
399
|
+
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
400
|
+
|
|
401
|
+
-- Find duplicate indexes
|
|
402
|
+
SELECT
|
|
403
|
+
pg_size_pretty(SUM(pg_relation_size(idx))::BIGINT) AS size,
|
|
404
|
+
(array_agg(idx))[1] AS idx1,
|
|
405
|
+
(array_agg(idx))[2] AS idx2,
|
|
406
|
+
(array_agg(idx))[3] AS idx3,
|
|
407
|
+
(array_agg(idx))[4] AS idx4
|
|
408
|
+
FROM (
|
|
409
|
+
SELECT
|
|
410
|
+
indexrelid::regclass AS idx,
|
|
411
|
+
(indrelid::text ||E'\n'|| indclass::text ||E'\n'|| indkey::text ||E'\n'||
|
|
412
|
+
COALESCE(indexprs::text,'')||E'\n' || COALESCE(indpred::text,'')) AS key
|
|
413
|
+
FROM pg_index
|
|
414
|
+
) sub
|
|
415
|
+
GROUP BY key
|
|
416
|
+
HAVING COUNT(*) > 1
|
|
417
|
+
ORDER BY SUM(pg_relation_size(idx)) DESC;
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**MySQL: Check index usage**
|
|
421
|
+
```sql
|
|
422
|
+
-- Find unused indexes
|
|
423
|
+
SELECT
|
|
424
|
+
t.TABLE_SCHEMA,
|
|
425
|
+
t.TABLE_NAME,
|
|
426
|
+
s.INDEX_NAME,
|
|
427
|
+
s.COLUMN_NAME
|
|
428
|
+
FROM information_schema.TABLES t
|
|
429
|
+
LEFT JOIN information_schema.STATISTICS s
|
|
430
|
+
ON t.TABLE_SCHEMA = s.TABLE_SCHEMA
|
|
431
|
+
AND t.TABLE_NAME = s.TABLE_NAME
|
|
432
|
+
WHERE t.TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema')
|
|
433
|
+
AND s.INDEX_NAME IS NOT NULL
|
|
434
|
+
ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME, s.INDEX_NAME;
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Index Bloat
|
|
438
|
+
|
|
439
|
+
**Definition**: Wasted space in indexes due to updates and deletes
|
|
440
|
+
|
|
441
|
+
**PostgreSQL: Check index bloat**
|
|
442
|
+
```sql
|
|
443
|
+
-- Estimate index bloat
|
|
444
|
+
SELECT
|
|
445
|
+
schemaname,
|
|
446
|
+
tablename,
|
|
447
|
+
indexname,
|
|
448
|
+
pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
|
|
449
|
+
ROUND(100 * (pg_relation_size(indexrelid) - pg_relation_size(indexrelid, 'main')) /
|
|
450
|
+
NULLIF(pg_relation_size(indexrelid), 0), 2) AS bloat_pct
|
|
451
|
+
FROM pg_stat_user_indexes
|
|
452
|
+
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Fix index bloat:**
|
|
456
|
+
```sql
|
|
457
|
+
-- PostgreSQL: Rebuild index concurrently
|
|
458
|
+
REINDEX INDEX CONCURRENTLY idx_users_email;
|
|
459
|
+
|
|
460
|
+
-- Or recreate index
|
|
461
|
+
DROP INDEX CONCURRENTLY idx_users_email;
|
|
462
|
+
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
|
|
463
|
+
|
|
464
|
+
-- MySQL: Rebuild index
|
|
465
|
+
ALTER TABLE users DROP INDEX idx_users_email, ADD INDEX idx_users_email(email);
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### Vacuuming (PostgreSQL)
|
|
469
|
+
|
|
470
|
+
**Purpose**: Reclaim space and update statistics
|
|
471
|
+
|
|
472
|
+
```sql
|
|
473
|
+
-- Vacuum table (reclaim space)
|
|
474
|
+
VACUUM users;
|
|
475
|
+
|
|
476
|
+
-- Vacuum and analyze (reclaim space + update statistics)
|
|
477
|
+
VACUUM ANALYZE users;
|
|
478
|
+
|
|
479
|
+
-- Full vacuum (locks table, reclaims more space)
|
|
480
|
+
VACUUM FULL users;
|
|
481
|
+
|
|
482
|
+
-- Autovacuum settings (postgresql.conf)
|
|
483
|
+
autovacuum = on
|
|
484
|
+
autovacuum_vacuum_scale_factor = 0.2
|
|
485
|
+
autovacuum_analyze_scale_factor = 0.1
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
490
|
+
## Analyzing Query Plans
|
|
491
|
+
|
|
492
|
+
### EXPLAIN Command
|
|
493
|
+
|
|
494
|
+
**PostgreSQL:**
|
|
495
|
+
```sql
|
|
496
|
+
-- Show query plan
|
|
497
|
+
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
|
|
498
|
+
|
|
499
|
+
-- Show query plan with actual execution
|
|
500
|
+
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';
|
|
501
|
+
|
|
502
|
+
-- Show query plan with more details
|
|
503
|
+
EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM users WHERE email = 'user@example.com';
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
**MySQL:**
|
|
507
|
+
```sql
|
|
508
|
+
-- Show query plan
|
|
509
|
+
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
|
|
510
|
+
|
|
511
|
+
-- Show query plan with more details
|
|
512
|
+
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE email = 'user@example.com';
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### Reading Query Plans
|
|
516
|
+
|
|
517
|
+
**Key metrics:**
|
|
518
|
+
- **Seq Scan**: Full table scan (slow for large tables)
|
|
519
|
+
- **Index Scan**: Using index (good)
|
|
520
|
+
- **Index Only Scan**: Using covering index (best)
|
|
521
|
+
- **Bitmap Index Scan**: Using multiple indexes
|
|
522
|
+
- **Cost**: Estimated cost (lower is better)
|
|
523
|
+
- **Rows**: Estimated rows returned
|
|
524
|
+
- **Actual Time**: Actual execution time (EXPLAIN ANALYZE)
|
|
525
|
+
|
|
526
|
+
**Example:**
|
|
527
|
+
```sql
|
|
528
|
+
-- Bad: Sequential scan
|
|
529
|
+
EXPLAIN SELECT * FROM users WHERE name = 'John';
|
|
530
|
+
-- Output: Seq Scan on users (cost=0.00..1000.00 rows=100)
|
|
531
|
+
|
|
532
|
+
-- Good: Index scan
|
|
533
|
+
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
|
|
534
|
+
-- Output: Index Scan using idx_users_email on users (cost=0.29..8.30 rows=1)
|
|
535
|
+
|
|
536
|
+
-- Best: Index only scan
|
|
537
|
+
EXPLAIN SELECT name FROM users WHERE email = 'user@example.com';
|
|
538
|
+
-- Output: Index Only Scan using idx_users_email_covering on users (cost=0.29..8.30 rows=1)
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## Database-Specific Indexing Features
|
|
544
|
+
|
|
545
|
+
### PostgreSQL
|
|
546
|
+
|
|
547
|
+
**Expression Indexes:**
|
|
548
|
+
```sql
|
|
549
|
+
-- Index on expression
|
|
550
|
+
CREATE INDEX idx_users_lower_email ON users(LOWER(email));
|
|
551
|
+
|
|
552
|
+
-- Query uses expression index
|
|
553
|
+
SELECT * FROM users WHERE LOWER(email) = 'user@example.com';
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
**Concurrent Index Creation:**
|
|
557
|
+
```sql
|
|
558
|
+
-- Create index without locking table
|
|
559
|
+
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
**Index-Only Scans:**
|
|
563
|
+
```sql
|
|
564
|
+
-- Covering index for index-only scans
|
|
565
|
+
CREATE INDEX idx_users_email_covering ON users(email) INCLUDE (name, created_at);
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### MySQL
|
|
569
|
+
|
|
570
|
+
**Prefix Indexes:**
|
|
571
|
+
```sql
|
|
572
|
+
-- Index first 10 characters of column
|
|
573
|
+
CREATE INDEX idx_users_email_prefix ON users(email(10));
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
**Fulltext Indexes:**
|
|
577
|
+
```sql
|
|
578
|
+
-- Create fulltext index
|
|
579
|
+
CREATE FULLTEXT INDEX idx_articles_content ON articles(content);
|
|
580
|
+
|
|
581
|
+
-- Fulltext search
|
|
582
|
+
SELECT * FROM articles WHERE MATCH(content) AGAINST('database optimization');
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
### SQL Server
|
|
586
|
+
|
|
587
|
+
**Columnstore Indexes:**
|
|
588
|
+
```sql
|
|
589
|
+
-- Create columnstore index for analytics
|
|
590
|
+
CREATE COLUMNSTORE INDEX idx_sales_columnstore ON sales(product_id, sale_date, amount);
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
**Filtered Indexes:**
|
|
594
|
+
```sql
|
|
595
|
+
-- Create filtered index (like PostgreSQL partial index)
|
|
596
|
+
CREATE INDEX idx_orders_pending ON orders(created_at)
|
|
597
|
+
WHERE status = 'pending';
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
602
|
+
## Indexing Best Practices
|
|
603
|
+
|
|
604
|
+
### DO
|
|
605
|
+
|
|
606
|
+
- ✅ Index primary keys (automatic)
|
|
607
|
+
- ✅ Index foreign keys
|
|
608
|
+
- ✅ Index columns used in WHERE clauses
|
|
609
|
+
- ✅ Index columns used in JOIN conditions
|
|
610
|
+
- ✅ Index columns used in ORDER BY
|
|
611
|
+
- ✅ Use composite indexes for multi-column queries
|
|
612
|
+
- ✅ Use covering indexes for frequently executed queries
|
|
613
|
+
- ✅ Use partial indexes for filtered queries
|
|
614
|
+
- ✅ Monitor index usage and remove unused indexes
|
|
615
|
+
- ✅ Rebuild indexes periodically to reduce bloat
|
|
616
|
+
- ✅ Use EXPLAIN to verify index usage
|
|
617
|
+
|
|
618
|
+
### DON'T
|
|
619
|
+
|
|
620
|
+
- ❌ Index every column
|
|
621
|
+
- ❌ Create duplicate indexes
|
|
622
|
+
- ❌ Index small tables (< 1000 rows)
|
|
623
|
+
- ❌ Index columns with low cardinality
|
|
624
|
+
- ❌ Index columns that are frequently updated
|
|
625
|
+
- ❌ Create indexes without testing
|
|
626
|
+
- ❌ Ignore index maintenance
|
|
627
|
+
- ❌ Create indexes during peak hours (without CONCURRENTLY)
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Indexing Checklist
|
|
632
|
+
|
|
633
|
+
### Planning Phase
|
|
634
|
+
|
|
635
|
+
- [ ] Identify frequently executed queries
|
|
636
|
+
- [ ] Identify columns used in WHERE clauses
|
|
637
|
+
- [ ] Identify columns used in JOIN conditions
|
|
638
|
+
- [ ] Identify columns used in ORDER BY
|
|
639
|
+
- [ ] Identify columns used in GROUP BY
|
|
640
|
+
- [ ] Consider composite indexes for multi-column queries
|
|
641
|
+
- [ ] Consider covering indexes for frequently executed queries
|
|
642
|
+
- [ ] Consider partial indexes for filtered queries
|
|
643
|
+
|
|
644
|
+
### Implementation Phase
|
|
645
|
+
|
|
646
|
+
- [ ] Create indexes on foreign keys
|
|
647
|
+
- [ ] Create indexes on frequently queried columns
|
|
648
|
+
- [ ] Use appropriate index type (B-tree, hash, GIN, GiST, BRIN)
|
|
649
|
+
- [ ] Use CONCURRENTLY in PostgreSQL (no table lock)
|
|
650
|
+
- [ ] Test index creation in staging first
|
|
651
|
+
- [ ] Verify index usage with EXPLAIN
|
|
652
|
+
|
|
653
|
+
### Maintenance Phase
|
|
654
|
+
|
|
655
|
+
- [ ] Monitor index usage
|
|
656
|
+
- [ ] Remove unused indexes
|
|
657
|
+
- [ ] Rebuild bloated indexes
|
|
658
|
+
- [ ] Update statistics (ANALYZE)
|
|
659
|
+
- [ ] Vacuum tables (PostgreSQL)
|
|
660
|
+
- [ ] Review query plans regularly
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Related Documentation
|
|
665
|
+
|
|
666
|
+
- **relational-databases.md**: Relational database fundamentals
|
|
667
|
+
- **relational-schema-design.md**: Schema design and normalization
|
|
668
|
+
- **relational-query-optimization.md**: Query optimization
|
|
669
|
+
- **performance-optimization.md**: General performance optimization
|
|
670
|
+
- **universal-best-practices.md**: General database best practices
|
|
671
|
+
|