opencode-skills-collection 4.0.54 → 4.0.56
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/bundled-skills/.antigravity-install-manifest.json +1 -1
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +10 -1
- package/bundled-skills/backend-security-coder/resources/implementation-playbook.md +23 -0
- package/bundled-skills/business-analyst/resources/implementation-playbook.md +23 -0
- package/bundled-skills/devops-troubleshooter/resources/implementation-playbook.md +23 -0
- package/bundled-skills/distributed-tracing/SKILL.md +22 -435
- package/bundled-skills/distributed-tracing/references/instrumentation.md +13 -0
- package/bundled-skills/distributed-tracing/references/jaeger-setup.md +13 -0
- package/bundled-skills/distributed-tracing/resources/implementation-playbook.md +23 -0
- package/bundled-skills/django-pro/resources/implementation-playbook.md +23 -0
- package/bundled-skills/embedding-strategies/SKILL.md +40 -64
- package/bundled-skills/embedding-strategies/resources/implementation-playbook.md +23 -0
- package/bundled-skills/fastapi-pro/resources/implementation-playbook.md +23 -0
- package/bundled-skills/find-complementary-founders/scripts/assess_profile.py +7 -1
- package/bundled-skills/frontend-security-coder/SKILL.md +5 -5
- package/bundled-skills/frontend-security-coder/resources/implementation-playbook.md +23 -0
- package/bundled-skills/github-actions-templates/SKILL.md +34 -314
- package/bundled-skills/github-actions-templates/references/common-workflows.md +13 -0
- package/bundled-skills/github-actions-templates/resources/implementation-playbook.md +23 -0
- package/bundled-skills/google-docs-automation/SKILL.md +19 -69
- package/bundled-skills/google-sheets-automation/SKILL.md +20 -128
- package/bundled-skills/google-slides-automation/SKILL.md +19 -128
- package/bundled-skills/grafana-dashboards/SKILL.md +6 -6
- package/bundled-skills/grafana-dashboards/references/dashboard-design.md +13 -0
- package/bundled-skills/grafana-dashboards/resources/implementation-playbook.md +23 -0
- package/bundled-skills/incident-responder/resources/implementation-playbook.md +23 -0
- package/bundled-skills/instagram/scripts/config.py +33 -8
- package/bundled-skills/ios-developer/resources/implementation-playbook.md +23 -0
- package/bundled-skills/junta-leiloeiros/scripts/.snyk +5 -0
- package/bundled-skills/junta-leiloeiros/scripts/requirements.txt +2 -0
- package/bundled-skills/kpi-dashboard-design/SKILL.md +7 -67
- package/bundled-skills/kpi-dashboard-design/resources/implementation-playbook.md +23 -0
- package/bundled-skills/kpi-dashboard-design/resources/metric-queries.sql +30 -0
- package/bundled-skills/lint-and-validate/SKILL.md +17 -45
- package/bundled-skills/lint-and-validate/scripts/lint_runner.py +17 -8
- package/bundled-skills/lint-and-validate/scripts/type_coverage.py +77 -167
- package/bundled-skills/mobile-developer/resources/implementation-playbook.md +23 -0
- package/bundled-skills/multi-platform-apps-multi-platform/resources/implementation-playbook.md +23 -0
- package/bundled-skills/notebooklm/scripts/config.py +33 -11
- package/bundled-skills/observability-and-instrumentation/SKILL.md +4 -1
- package/bundled-skills/observability-and-instrumentation/references/observability-checklist.md +13 -0
- package/bundled-skills/pci-compliance/SKILL.md +23 -469
- package/bundled-skills/pci-compliance/resources/implementation-playbook.md +23 -0
- package/bundled-skills/postmortem-writing/SKILL.md +1 -1
- package/bundled-skills/postmortem-writing/resources/implementation-playbook.md +23 -0
- package/bundled-skills/pydantic-models-py/SKILL.md +1 -3
- package/bundled-skills/secrets-management/SKILL.md +24 -349
- package/bundled-skills/secrets-management/references/github-secrets.md +13 -0
- package/bundled-skills/secrets-management/references/vault-setup.md +13 -0
- package/bundled-skills/security-and-hardening/SKILL.md +8 -6
- package/bundled-skills/security-and-hardening/references/security-checklist.md +13 -0
- package/bundled-skills/seo-content-planner/resources/implementation-playbook.md +23 -0
- package/bundled-skills/seo-content-writer/SKILL.md +2 -2
- package/bundled-skills/seo-content-writer/resources/implementation-playbook.md +23 -0
- package/bundled-skills/shopify-development/scripts/.snyk +3 -0
- package/bundled-skills/slack-gif-creator/.snyk +5 -0
- package/bundled-skills/slack-gif-creator/requirements.txt +2 -2
- package/bundled-skills/slo-implementation/SKILL.md +24 -9
- package/bundled-skills/slo-implementation/references/error-budget.md +13 -0
- package/bundled-skills/slo-implementation/references/slo-definitions.md +13 -0
- package/bundled-skills/slo-implementation/resources/implementation-playbook.md +23 -0
- package/bundled-skills/sql-optimization-patterns/SKILL.md +10 -6
- package/bundled-skills/sql-optimization-patterns/resources/implementation-playbook.md +52 -56
- package/bundled-skills/telegram/assets/boilerplate/nodejs/package-lock.json +1888 -0
- package/bundled-skills/telegram/assets/boilerplate/nodejs/package.json +3 -0
- package/bundled-skills/vector-database-engineer/resources/implementation-playbook.md +23 -0
- package/bundled-skills/videodb/scripts/ws_listener.py +8 -1
- package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package-lock.json +1881 -0
- package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/package.json +3 -0
- package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/python/.snyk +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SLO implementation playbook
|
|
2
|
+
|
|
3
|
+
## Inputs
|
|
4
|
+
|
|
5
|
+
User journey, eligible event population, success threshold, observation window and responsible service owner.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
|
|
9
|
+
1. Define good and total events together, including timeout and no-traffic behavior. Choose a target from user needs and observed baseline.
|
|
10
|
+
2. Compute bad fraction, budget and burn rate from the same population. Create every recording rule referenced by alerts and check labels align.
|
|
11
|
+
3. Test healthy, exhausted, missing-data and zero-traffic cases with known counts. Review paging thresholds, runbook and recovery behavior before enabling notifications.
|
|
12
|
+
|
|
13
|
+
## Worked example
|
|
14
|
+
|
|
15
|
+
For 100,000 eligible requests at a 99.9% target, the budget is 100 bad requests. Fifty observed failures consume half the budget.
|
|
16
|
+
|
|
17
|
+
## Verification and handoff
|
|
18
|
+
|
|
19
|
+
Report the actual files or configuration changed, checks performed, observed results and any untested environment. Keep the original inputs and evidence sufficient to reproduce the conclusion.
|
|
20
|
+
|
|
21
|
+
## Limitations
|
|
22
|
+
|
|
23
|
+
Request-based budgets cannot be converted directly into downtime minutes under variable traffic. Example thresholds are not service commitments.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sql-optimization-patterns
|
|
3
|
-
description: "
|
|
4
|
-
risk:
|
|
3
|
+
description: "Diagnose slow SQL with query plans, preserve query results, and verify indexing or query changes against representative data."
|
|
4
|
+
risk: critical
|
|
5
5
|
source: community
|
|
6
6
|
date_added: "2026-02-27"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# SQL Optimization Patterns
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Diagnose slow SQL with query plans, preserve query results, and verify indexing or query changes against representative data.
|
|
12
12
|
|
|
13
13
|
## Use this skill when
|
|
14
14
|
|
|
@@ -28,9 +28,9 @@ Transform slow database queries into lightning-fast operations through systemati
|
|
|
28
28
|
|
|
29
29
|
## Instructions
|
|
30
30
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
31
|
+
- Confirm database engine/version, query parameters, expected rows, data distribution and the permitted environment. Start read-only; obtain authorization before DDL, data changes, configuration changes or maintenance.
|
|
32
|
+
- Compare result sets before comparing performance. EXPLAIN ANALYZE executes the statement: use approved representative data, account for functions and triggers, and do not assume a transaction rollback undoes every side effect.
|
|
33
|
+
- Record the observed plan, timing conditions and correctness checks. Indexes and query rewrites are hypotheses, not universal speed improvements.
|
|
34
34
|
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
35
35
|
|
|
36
36
|
## Resources
|
|
@@ -41,3 +41,7 @@ Transform slow database queries into lightning-fast operations through systemati
|
|
|
41
41
|
- Use this skill only when the task clearly matches the scope described above.
|
|
42
42
|
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
|
|
43
43
|
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
|
|
44
|
+
|
|
45
|
+
## Worked example
|
|
46
|
+
|
|
47
|
+
The playbook includes an executable SQLite batch-loading example with bound values and an empty-input case. The repository test exercises it alongside pagination ties and aggregation equivalence. SQLite correctness checks do not establish PostgreSQL performance or production safety.
|
|
@@ -4,7 +4,7 @@ This file contains detailed patterns, checklists, and code samples referenced by
|
|
|
4
4
|
|
|
5
5
|
# SQL Optimization Patterns
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Preserve the query result before assessing performance. PostgreSQL-specific examples target PostgreSQL 18 unless marked otherwise; use an authorized test database with matching tables. DDL, configuration and maintenance examples require explicit authorization. EXPLAIN ANALYZE executes the statement, including possible function side effects.
|
|
8
8
|
|
|
9
9
|
## Do not use this skill when
|
|
10
10
|
|
|
@@ -53,9 +53,9 @@ WHERE u.created_at > NOW() - INTERVAL '30 days';
|
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
**Key Metrics to Watch:**
|
|
56
|
-
- **Seq Scan**:
|
|
57
|
-
- **Index Scan**:
|
|
58
|
-
- **Index Only Scan**:
|
|
56
|
+
- **Seq Scan**: May be appropriate for small tables or queries returning much of a table
|
|
57
|
+
- **Index Scan**: Assess selectivity and heap reads, not just the node name
|
|
58
|
+
- **Index Only Scan**: Check heap fetches and visibility; not automatically fastest
|
|
59
59
|
- **Nested Loop**: Join method (okay for small datasets)
|
|
60
60
|
- **Hash Join**: Join method (good for larger datasets)
|
|
61
61
|
- **Merge Join**: Join method (good for sorted data)
|
|
@@ -127,18 +127,18 @@ SELECT * FROM users WHERE email = 'user@example.com';
|
|
|
127
127
|
|
|
128
128
|
**Optimize JOINs:**
|
|
129
129
|
```sql
|
|
130
|
-
--
|
|
130
|
+
-- Equivalent inner-join spelling; the optimizer may produce the same plan
|
|
131
131
|
SELECT u.name, o.total
|
|
132
132
|
FROM users u, orders o
|
|
133
133
|
WHERE u.id = o.user_id AND u.created_at > '2024-01-01';
|
|
134
134
|
|
|
135
|
-
--
|
|
135
|
+
-- Explicit JOIN improves readability, not necessarily execution
|
|
136
136
|
SELECT u.name, o.total
|
|
137
137
|
FROM users u
|
|
138
138
|
JOIN orders o ON u.id = o.user_id
|
|
139
139
|
WHERE u.created_at > '2024-01-01';
|
|
140
140
|
|
|
141
|
-
--
|
|
141
|
+
-- Equivalent subquery form; only users are filtered here
|
|
142
142
|
SELECT u.name, o.total
|
|
143
143
|
FROM (SELECT * FROM users WHERE created_at > '2024-01-01') u
|
|
144
144
|
JOIN orders o ON u.id = o.user_id;
|
|
@@ -172,29 +172,25 @@ SELECT * FROM orders
|
|
|
172
172
|
WHERE user_id IN (1, 2, 3, 4, 5);
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
+
**Executable SQLite batch loading** (an existing connection and table are required):
|
|
176
|
+
|
|
175
177
|
```python
|
|
176
|
-
#
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
""")
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
orders = db.query(
|
|
189
|
-
"SELECT * FROM orders WHERE user_id IN (?)",
|
|
190
|
-
user_ids
|
|
191
|
-
)
|
|
192
|
-
# Group orders by user_id
|
|
193
|
-
orders_by_user = {}
|
|
194
|
-
for order in orders:
|
|
195
|
-
orders_by_user.setdefault(order.user_id, []).append(order)
|
|
178
|
+
# batch-loading-example
|
|
179
|
+
|
|
180
|
+
def load_orders(connection, user_ids):
|
|
181
|
+
if not user_ids:
|
|
182
|
+
return []
|
|
183
|
+
if len(user_ids) > 500:
|
|
184
|
+
raise ValueError("Batch limit is 500 IDs; split larger inputs")
|
|
185
|
+
placeholders = ",".join("?" for _ in user_ids)
|
|
186
|
+
return connection.execute(
|
|
187
|
+
f"SELECT id, user_id, total FROM orders WHERE user_id IN ({placeholders}) ORDER BY id",
|
|
188
|
+
tuple(user_ids),
|
|
189
|
+
).fetchall()
|
|
196
190
|
```
|
|
197
191
|
|
|
192
|
+
Values are bound, never interpolated. A single `IN (?)` parameter does not expand a Python list. Other drivers use different placeholders. Preserve parents with no orders when reconstructing parent/child results; a JOIN duplicates parent rows when multiple children match.
|
|
193
|
+
|
|
198
194
|
### Pattern 2: Optimize Pagination
|
|
199
195
|
|
|
200
196
|
**Bad: OFFSET on Large Tables**
|
|
@@ -207,13 +203,13 @@ LIMIT 20 OFFSET 100000; -- Very slow!
|
|
|
207
203
|
|
|
208
204
|
**Good: Cursor-Based Pagination**
|
|
209
205
|
```sql
|
|
210
|
-
--
|
|
206
|
+
-- Single-column cursor is valid only when created_at is unique and non-null
|
|
211
207
|
SELECT * FROM users
|
|
212
208
|
WHERE created_at < '2024-01-15 10:30:00' -- Last cursor
|
|
213
209
|
ORDER BY created_at DESC
|
|
214
210
|
LIMIT 20;
|
|
215
211
|
|
|
216
|
-
--
|
|
212
|
+
-- For timestamp ties, use both non-null created_at and unique id from the last row
|
|
217
213
|
SELECT * FROM users
|
|
218
214
|
WHERE (created_at, id) < ('2024-01-15 10:30:00', 12345)
|
|
219
215
|
ORDER BY created_at DESC, id DESC
|
|
@@ -230,10 +226,10 @@ CREATE INDEX idx_users_cursor ON users(created_at DESC, id DESC);
|
|
|
230
226
|
-- Bad: Counts all rows
|
|
231
227
|
SELECT COUNT(*) FROM orders; -- Slow on large tables
|
|
232
228
|
|
|
233
|
-
--
|
|
229
|
+
-- Approximate count only; not equivalent to exact COUNT(*)
|
|
234
230
|
SELECT reltuples::bigint AS estimate
|
|
235
231
|
FROM pg_class
|
|
236
|
-
WHERE
|
|
232
|
+
WHERE oid = 'public.orders'::regclass;
|
|
237
233
|
|
|
238
234
|
-- Good: Filter before counting
|
|
239
235
|
SELECT COUNT(*) FROM orders
|
|
@@ -253,14 +249,14 @@ FROM orders
|
|
|
253
249
|
GROUP BY user_id
|
|
254
250
|
HAVING COUNT(*) > 10;
|
|
255
251
|
|
|
256
|
-
--
|
|
252
|
+
-- DIFFERENT REQUIREMENT: count only completed orders; not an equivalent rewrite
|
|
257
253
|
SELECT user_id, COUNT(*) as order_count
|
|
258
254
|
FROM orders
|
|
259
255
|
WHERE status = 'completed'
|
|
260
256
|
GROUP BY user_id
|
|
261
257
|
HAVING COUNT(*) > 10;
|
|
262
258
|
|
|
263
|
-
--
|
|
259
|
+
-- Candidate index; compare the actual plan and write overhead
|
|
264
260
|
CREATE INDEX idx_orders_user_status ON orders(user_id, status);
|
|
265
261
|
```
|
|
266
262
|
|
|
@@ -279,7 +275,7 @@ FROM users u
|
|
|
279
275
|
LEFT JOIN orders o ON o.user_id = u.id
|
|
280
276
|
GROUP BY u.id, u.name, u.email;
|
|
281
277
|
|
|
282
|
-
--
|
|
278
|
+
-- Alternative window form; may process more rows, measure before choosing
|
|
283
279
|
SELECT DISTINCT ON (u.id)
|
|
284
280
|
u.name, u.email,
|
|
285
281
|
COUNT(o.id) OVER (PARTITION BY u.id) as order_count
|
|
@@ -335,11 +331,11 @@ UPDATE users SET status = 'active' WHERE id = 2;
|
|
|
335
331
|
-- Good: Single UPDATE with IN clause
|
|
336
332
|
UPDATE users
|
|
337
333
|
SET status = 'active'
|
|
338
|
-
WHERE id IN (1, 2, 3, 4, 5
|
|
334
|
+
WHERE id IN (1, 2, 3, 4, 5);
|
|
339
335
|
|
|
340
336
|
-- Better: Use temporary table for large batches
|
|
341
337
|
CREATE TEMP TABLE temp_user_updates (id INT, new_status VARCHAR);
|
|
342
|
-
INSERT INTO temp_user_updates VALUES (1, 'active'), (2, 'active')
|
|
338
|
+
INSERT INTO temp_user_updates VALUES (1, 'active'), (2, 'active');
|
|
343
339
|
|
|
344
340
|
UPDATE users u
|
|
345
341
|
SET status = t.new_status
|
|
@@ -372,7 +368,8 @@ CREATE INDEX idx_user_summary_spent ON user_order_summary(total_spent DESC);
|
|
|
372
368
|
-- Refresh materialized view
|
|
373
369
|
REFRESH MATERIALIZED VIEW user_order_summary;
|
|
374
370
|
|
|
375
|
-
-- Concurrent refresh
|
|
371
|
+
-- Concurrent refresh requires a populated view and a non-partial UNIQUE index on plain columns.
|
|
372
|
+
CREATE UNIQUE INDEX idx_user_summary_id ON user_order_summary(id);
|
|
376
373
|
REFRESH MATERIALIZED VIEW CONCURRENTLY user_order_summary;
|
|
377
374
|
|
|
378
375
|
-- Query materialized view (very fast)
|
|
@@ -403,24 +400,24 @@ CREATE TABLE orders_2024_q2 PARTITION OF orders
|
|
|
403
400
|
|
|
404
401
|
-- Queries automatically use appropriate partition
|
|
405
402
|
SELECT * FROM orders
|
|
406
|
-
WHERE created_at
|
|
403
|
+
WHERE created_at >= '2024-02-01' AND created_at < '2024-03-01';
|
|
407
404
|
-- Only scans orders_2024_q1 partition
|
|
408
405
|
```
|
|
409
406
|
|
|
410
407
|
### Query Hints and Optimization
|
|
411
408
|
|
|
412
409
|
```sql
|
|
413
|
-
--
|
|
410
|
+
-- Restrict candidate indexes (MySQL); USE INDEX does not force an index scan
|
|
414
411
|
SELECT * FROM users
|
|
415
412
|
USE INDEX (idx_users_email)
|
|
416
413
|
WHERE email = 'user@example.com';
|
|
417
414
|
|
|
418
415
|
-- Parallel query (PostgreSQL)
|
|
419
416
|
SET max_parallel_workers_per_gather = 4;
|
|
420
|
-
SELECT * FROM large_table WHERE
|
|
417
|
+
SELECT * FROM large_table WHERE id = 123;
|
|
421
418
|
|
|
422
419
|
-- Join hints (PostgreSQL)
|
|
423
|
-
SET enable_nestloop = OFF; --
|
|
420
|
+
SET enable_nestloop = OFF; -- Discourage nested loops for diagnosis; not an absolute prohibition
|
|
424
421
|
```
|
|
425
422
|
|
|
426
423
|
## Best Practices
|
|
@@ -454,17 +451,18 @@ REINDEX TABLE users;
|
|
|
454
451
|
- **Unused Indexes**: Waste space and slow writes
|
|
455
452
|
- **Missing Indexes**: Slow queries, full table scans
|
|
456
453
|
- **Implicit Type Conversion**: Prevents index usage
|
|
457
|
-
- **OR Conditions**:
|
|
458
|
-
- **LIKE with Leading Wildcard**:
|
|
454
|
+
- **OR Conditions**: May combine indexes; inspect the plan
|
|
455
|
+
- **LIKE with Leading Wildcard**: Ordinary B-tree indexes often do not help; specialized indexes may
|
|
459
456
|
- **Function in WHERE**: Prevents index usage unless functional index exists
|
|
460
457
|
|
|
461
458
|
## Monitoring Queries
|
|
462
459
|
|
|
463
460
|
```sql
|
|
464
|
-
--
|
|
465
|
-
|
|
461
|
+
-- Requires an already configured pg_stat_statements extension and suitable privileges.
|
|
462
|
+
-- Query text can contain sensitive values; do not export it without permission.
|
|
463
|
+
SELECT query, calls, total_exec_time, mean_exec_time
|
|
466
464
|
FROM pg_stat_statements
|
|
467
|
-
ORDER BY
|
|
465
|
+
ORDER BY mean_exec_time DESC
|
|
468
466
|
LIMIT 10;
|
|
469
467
|
|
|
470
468
|
-- Find missing indexes (PostgreSQL)
|
|
@@ -480,11 +478,11 @@ WHERE seq_scan > 0
|
|
|
480
478
|
ORDER BY seq_tup_read DESC
|
|
481
479
|
LIMIT 10;
|
|
482
480
|
|
|
483
|
-
--
|
|
481
|
+
-- Zero scans are observations since statistics reset, not permission to drop an index.
|
|
484
482
|
SELECT
|
|
485
483
|
schemaname,
|
|
486
484
|
tablename,
|
|
487
|
-
|
|
485
|
+
indexrelname,
|
|
488
486
|
idx_scan,
|
|
489
487
|
idx_tup_read,
|
|
490
488
|
idx_tup_fetch
|
|
@@ -493,12 +491,10 @@ WHERE idx_scan = 0
|
|
|
493
491
|
ORDER BY pg_relation_size(indexrelid) DESC;
|
|
494
492
|
```
|
|
495
493
|
|
|
496
|
-
##
|
|
494
|
+
## Verified reference material
|
|
495
|
+
|
|
496
|
+
- [PostgreSQL 18 EXPLAIN](https://www.postgresql.org/docs/18/using-explain.html): execution, estimates and observed plans.
|
|
497
|
+
- [PostgreSQL 18 materialized-view refresh](https://www.postgresql.org/docs/18/sql-refreshmaterializedview.html): populated view and unique-index requirements.
|
|
498
|
+
- [PostgreSQL 18 statement statistics](https://www.postgresql.org/docs/18/pgstatstatements.html): extension prerequisites and current time columns.
|
|
497
499
|
|
|
498
|
-
|
|
499
|
-
- **references/mysql-optimization-guide.md**: MySQL/MariaDB optimization
|
|
500
|
-
- **references/query-plan-analysis.md**: Deep dive into EXPLAIN plans
|
|
501
|
-
- **assets/index-strategy-checklist.md**: When and how to create indexes
|
|
502
|
-
- **assets/query-optimization-checklist.md**: Step-by-step optimization guide
|
|
503
|
-
- **scripts/analyze-slow-queries.sql**: Identify slow queries in your database
|
|
504
|
-
- **scripts/index-recommendations.sql**: Generate index recommendations
|
|
500
|
+
The former references to unbundled local guides and scripts have been removed. Examples above assume application tables and permissions; they are not one migration script. Performance, locks, concurrent changes, extension setup and production-provider behavior require separate environment-specific verification.
|