@mytechtoday/augment-extensions 0.5.0 → 1.2.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.
Files changed (523) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +113 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +15 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +576 -23
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/config-system.d.ts +111 -0
  476. package/cli/dist/utils/config-system.d.ts.map +1 -0
  477. package/cli/dist/utils/config-system.js +239 -0
  478. package/cli/dist/utils/config-system.js.map +1 -0
  479. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  480. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  481. package/cli/dist/utils/extractCommandHelp.js +250 -0
  482. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  483. package/cli/dist/utils/hook-system.d.ts +84 -0
  484. package/cli/dist/utils/hook-system.d.ts.map +1 -0
  485. package/cli/dist/utils/hook-system.js +151 -0
  486. package/cli/dist/utils/hook-system.js.map +1 -0
  487. package/cli/dist/utils/inspection-cache.d.ts +56 -0
  488. package/cli/dist/utils/inspection-cache.d.ts.map +1 -0
  489. package/cli/dist/utils/inspection-cache.js +166 -0
  490. package/cli/dist/utils/inspection-cache.js.map +1 -0
  491. package/cli/dist/utils/inspection-handlers.d.ts +75 -0
  492. package/cli/dist/utils/inspection-handlers.d.ts.map +1 -0
  493. package/cli/dist/utils/inspection-handlers.js +171 -0
  494. package/cli/dist/utils/inspection-handlers.js.map +1 -0
  495. package/cli/dist/utils/install-rules.js +55 -55
  496. package/cli/dist/utils/mcp-integration.js +44 -44
  497. package/cli/dist/utils/module-system.d.ts +1 -0
  498. package/cli/dist/utils/module-system.d.ts.map +1 -1
  499. package/cli/dist/utils/module-system.js +8 -3
  500. package/cli/dist/utils/module-system.js.map +1 -1
  501. package/cli/dist/utils/plugin-system.d.ts +133 -0
  502. package/cli/dist/utils/plugin-system.d.ts.map +1 -0
  503. package/cli/dist/utils/plugin-system.js +210 -0
  504. package/cli/dist/utils/plugin-system.js.map +1 -0
  505. package/cli/dist/utils/progress.d.ts +67 -0
  506. package/cli/dist/utils/progress.d.ts.map +1 -0
  507. package/cli/dist/utils/progress.js +146 -0
  508. package/cli/dist/utils/progress.js.map +1 -0
  509. package/cli/dist/utils/rule-install-hooks.js +8 -8
  510. package/cli/dist/utils/stream-reader.d.ts +34 -0
  511. package/cli/dist/utils/stream-reader.d.ts.map +1 -0
  512. package/cli/dist/utils/stream-reader.js +147 -0
  513. package/cli/dist/utils/stream-reader.js.map +1 -0
  514. package/cli/dist/utils/vscode-editor.d.ts +45 -0
  515. package/cli/dist/utils/vscode-editor.d.ts.map +1 -0
  516. package/cli/dist/utils/vscode-editor.js +171 -0
  517. package/cli/dist/utils/vscode-editor.js.map +1 -0
  518. package/cli/dist/utils/vscode-links.d.ts +49 -0
  519. package/cli/dist/utils/vscode-links.d.ts.map +1 -0
  520. package/cli/dist/utils/vscode-links.js +167 -0
  521. package/cli/dist/utils/vscode-links.js.map +1 -0
  522. package/modules.md +667 -630
  523. package/package.json +85 -85
@@ -1,671 +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
-
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
+